#author("2024-04-25T14:48:19+09:00","default:admin","admin") #author("2024-04-30T15:22:10+09:00","default:admin","admin") このページにはBakinの機能を組み合わせて使うことでさまざまなゲームシステムを実現する制作Tipsを記載しています。 下記に登場するサンプルプロジェクト「Orb Stories」「ダンジョンRPGサンプル」は、Bakinのトップメニュー>ゲームギャラリーにあります。 #Contents ---- *ゲームの動作が重い際の対処法 [#r9db5301] ゲームプレイをしてみて操作に対してゲームの動作が遅い・かくつくといった症状がある場合、下記の点を意識して変更すると改善する可能性があります。 ***コリジョン(当たり判定)の見直し [#md407955] コリジョンは処理時間に対する影響が大きい要素です。 まず「イベント」のコリジョンは「物体」のコリジョンと比較して処理時間が大きくかかります。 またコリジョンのサイズの大きさや形状の複雑さも処理に影響を与えます。 そのため下記の対策をとってみてください。 -「イベント」である必要ないものは「物体」に置き換える -- マップ上の侵入してほしくない箇所をふさぐ際、コリジョンだけを持つ透明なイベントを多数置いている場合は下記を試してみてください。 ''&color(red){(!)};''イベントテンプレート「見えない壁」については後日修正を検討しています。 ---リソース>[[3Dスタンプ]]でグラフィック「なし」を選んだスタンプを作り、サイズを調整。壁として配置する。 ---リソース>[[地形]]のプロパティーで「通行可能」をNOに設定した地形を作り、侵入してほしくない箇所の地形を置き換える。 通行不可の地形の上に置かれた3Dスタンプのプロパティーの「通行不可地形を無視する」がONになっていると、その物体の上は通れてしまうことに注意してください。 -「物体」のコリジョンを簡易なものに変える --リソース>[[3Dスタンプ]]のプロパティーで簡易コリジョン設定が「Mesh」で指定されているものを「Box」などシンプルな形に変更する。 プロジェクトを新規作成した際に含まれる3Dスタンプの中には「Mesh」設定になっているものも多くあります。 これらは簡素なコリジョン用モデルを別途作成して割り当ててありますが、もっと簡素で構わないというケースも多々あると思われます。 その際は適宜コリジョンを「Box」等簡易なものに変更してください。 #br リソース>[[物理設定]]でシンプルなコリジョンを組み合わせたコリジョン用のモデルを作ることもできます。 作ったモデルはリソース>[[3Dスタンプ]]で「正確なコリジョン設定」をONにした上で割り当ててください。 -コリジョン不要な個所に置く「物体」のコリジョンを削除する 例えば、一本道の両脇にプレイヤーが侵入できない森が広がっている風景の「木々」や、街の通りから奥にある風景のために置いてある「建物」といったものはコリジョンはいりません。 こういった箇所にはコリジョンの無い「物体」を用意して配置します。 リソース>[[3Dスタンプ]]で「正確なコリジョン設定」をONにした上でコリジョンモデルを割り当てないことで、コリジョンの無い「物体」が作れます。 またゲームプレイをするPCのスペックが処理時間に影響を与えるケースもありますことをご了承ください。 ---- *プレイヤーを透明にする [#w28c059b] 「ダンジョンRPGサンプル」では一人称カメラにした際プレイヤーを非表示にするために、データベース>キャストの移動用グラフィックに、「グラフィック設定をしないスタンプ」を設定しています。 -「ダンジョンRPGサンプル」のデータベース>キャストの「ケン」を見てみてください。 移動用グラフィックをクリックすると、DungeonPlayer_2Dという2Dスタンプが割り当たっているのがわかります。 -次にリソース>2DスタンプでDungeonPlayer_2Dを見てみるとグラフィックのところは指定無しにしています。 またサブグラフィックもグラフィックに何も指定せずに、ローカルライトだけ設定しています。 これはプレイヤーが明かりを持っているように前を照らすために設定しています。 -このグラフィック指定をせずにサブグラフィックのローカルライト設定のみを加えたスタンプは、「ダンジョンRPGサンプル」のB1マップのラストボス戦でも使用しています。 このスタンプをイベント化した状態でマップに配置しておき、ボスを倒す前は「イベントのサブグラフィックの表示状態変更」パネルでサブグラフィックをオフにしておきます。 そしてボスを倒した後はサブグラフィックをオンにしローカルライトを有効にすることで、部屋の明るさを変える演出を実現しています。 ---- *グリッド移動 [#bae9f034] グリッド単位の移動(地形のマス目単位に動く)は共通イベントを使うことで実現できます。 -「ダンジョンRPGサンプル」のコモンイベントパレットにある「グリッド移動」イベントを参考にしてみてください。 このイベントをエクスポートし、ご自分のプロジェクトの共通イベントでカスタムイベントを作成し、そのイベントにインポートすることでグリッド移動を導入することもできます。 -歩くスピードはイベント内にある「プレイヤーの移動スピードを変える」パネルで変更できます。ただし現状あまりスピードを遅くすると段差が登れないケースがありますのでご容赦ください。 -イベントでは、プレイヤーの操作を禁止した上で、改めて押された方向キーを確認。指定の角度にプレイヤーを移動させ、かつグリッドの中央に吸着させています。 ---- *バトル中のパーティに「前列/後列」の概念を導入する [#ta19d638] 「ダンジョンRPGサンプル」のバトルでは、パーティ側に前列/後列の概念を設定しています。(シンプルにするためにあえて敵は前列のみにしています。) 後列のメンバーは射程の長い武器を使わないと敵を攻撃できませんし、逆に敵からも素手の攻撃は基本当たりません。 これらの仕組みは下記の機能を設定することで実現しています。 **バトルレイアウトで味方パーティメンバーの立ち位置を設定する [#b194dca4] ゲーム定義>[[ルールと操作]]>バトルレイアウトの設定や、マップ設定パレット>敵分布、イベントパネル「バトル実行と結果の確認」にてバトル時の敵味方の配置の指定ができます。 バトル中の表示位置だけではなく、敵味方の距離もここで設定した内容をもとに算出されます。 ダンジョンRPGサンプルでは下記の画像のような配置をしています。 #br #ref(./バトルレイアウト.png,70%) **射程を設定する [#i50a14a0] 射程の概念をバトルに導入するにはまず、ゲーム定義>[[ルールと操作]]にて「射程を使用」をONにします。 そして「射程判定タイプ」を後述する「列」または「距離」のどちらかを指定してください。 「列」と「距離」の違いはゲーム定義>[[ルールと操作]]>「射程判定タイプ」をご覧ください。 次にデータベース>アイテムや、データベース>キャスト>基本タブにて、武器やキャスト自身(素手攻撃)の射程を設定する必要があります。 射程の単位はバトルレイアウトのグリッドです。 「ダンジョンRPGサンプル」のバトル中にメンバーの上に出ているFront/Backの表示はレイアウトツール>バトルステータスにて表示物を設定しています。 ---- *ダメージ表示 [#iad7936d] 「ダンジョンRPGサンプル」ではバトルシーンにて、パーティのステータス表示部分に攻撃されたときのダメージ値やエフェクトが出るようになっています。 - これはレイアウトツール>バトルステータス画面に特殊座標指定タグDamagePositionを設定したパーツを配置することで実現しています。 レイアウトパーツリストに「ダメージ表示位置」というコンテナがありますので参考にしてください。 ---- *パーティの並び替え [#w8406267] 前列/後列の概念がバトルに入ると、深いダメージを負ったメンバーを後列に回す、といった順番の並び替えに意味が出てきます。 「ダンジョンRPGサンプル」ではバトルコマンドとして「場所入れ替え」をできるようにするとともに、戦闘不能になったメンバーを自動的に後列に回すといった処理も行っています。 **バトルコマンド「場所の入れ替え」を有効にする [#xae9f1c4] バトル中に並び替えコマンドを使えるようにするには、データベース>[[キャスト]]>バトルタブの「バトルコマンドのメニュー」にて、割り当てる機能に「場所を入れ替える」を指定したコマンドを作成してください。 **「状態」による自動的並び替えを有効にする [#h32d4878] バトル中の状態によって自動的にメンバーを後列に送るには、まずゲーム定義>[[ルールと操作]]にて「バトル中の状態による並び替えを使用」をONにします。 またその際、必要に応じて「状態解除時に元の並びに戻す」をONにしてもいいでしょう。 そして、どの「状態」になったら後方に下がるのかは、データベース>[[状態定義]]の基本設定「付与の間、パーティの後方に移動」にて指定します。 ---- *バトルの背景切り替え [#mbcbcc4b] 「ダンジョンRPGサンプル」では、エンカウントバトルとボスバトルなど必要に応じて背景の2Dグラフィックを切り替えています。 これはイベントを使って実現しています。 -まずバトルマップとして使用している「Dungeon_2DBattleMap」に背景グラフィック用のイベントを配置します。 そのイベント内に変数値によって起動するイベントシートを複数用意し、それぞれに背景用グラフィックを割り当てています。 -そのうえでバトルが発生するイベントにて、背景に使いたいイベントシート用の値を変数に入れることで背景を切り替えています。 ---- *レイアウト上に表示する項目の絞込み [#ub90277f] 「ダンジョンRPGサンプル」では、「アイテムリスト」や「図鑑」にあたる各メニューにて、「武器だけ」や「貴重品のみ」といった表示する項目の絞込みを行っています。 これはデータベースの「管理タグ」とレイアウトツールの機能を組み合わせて実現しています。 **データベースの管理タグ [#nda5276c] データベースの項目ツリーの下に位置する管理タグ+メモ欄に、”#”を付けたタグを自由に設定できます。 またアイテムは基本設定の「消耗品」「武器」「防具」の設定や価格を0に設定することで内部的にタグが生成されています。 **レイアウトツールでのタグによる絞込み [#w6df7914] タグがついた項目のうちどれを表示するかをレイアウトツールで指定します。 アイテム選択画面などのレイアウトプロパティーにある「表示するアイテムの管理タグ」にてタグを指定することで表示する項目を指定できます。 タグを複数指定するとAND条件(「〇〇かつ××」)になることに留意してください。 **「図鑑」画面への表示 [#s40887f6] 「図鑑」タイプのレイアウトでは、データベースの各項目にある「そのほか」タブにて「図鑑登録」をオンにした項目だけが表示されることに注意してください。 ダンジョンRPGサンプルの図鑑、すなわち「探索手帳」のモンスターには、敵キャストだけが表示されるようになっています。 これを実現するために、まずデータベース>キャストでいわゆるモンスターに相当するキャストには#Monsterタグを設定しています そしてレイアウトツール>キャスト図鑑のレイアウトプロパティー「表示するアイテムの管理タグ」に#Monsterを指定することで実現しています。 ---- *強化アイテム [#hea54bae] 「ダンジョンRPGサンプル」では「ナイフ+1」のような強化されたアイテムが宝箱から出てきたり、手持ちのアイテムを強化してくれるイベントが発生します。 下記のような機能を組み合わせてこれを実現しています。 **強化可能アイテムに指定する [#c3385359] あるアイテムを強化できるアイテムにしたい場合は、まずデータベース>[[アイテム]]で強化させたいアイテムの「強化可能」をオンにすることを忘れないでください。 **アイテムの「カスタムイベント」を使った強化 [#b4831b39] 宝箱から出てくるアイテムについては、データベース>[[アイテム]]のカスタムイベントに、アイテムを強化する内容のイベントを組んでいます。 カスタムイベントはアイテムを取得したときに起動します。 イベントの中では乱数とループを使って”+1”から”+3"までのアイテムが登場するようになっています。 **強化するアイテム選択画面とコモンイベントを使った強化 [#p03381ff] B1マップでのアイテム強化イベントはレイアウトツールとコモンイベントの組み合わせで実現しています。 レイアウトツール>「強化するアイテム選択」画面のサブメニューコンテナのアクションから、共通イベント「アイテム強化_B1」を呼び出しています。 またレイアウトプロパティー「変数指定」に、コモンイベント側で使う『アイテムの強化』や『複雑な変数ボックスの操作』で使う『アイテム袋のn番目のパラメータ』変数を指定してください。 強化するアイテム選択画面は、コモンイベントとの組み合わせで効力を発揮することに注意してください。 アイテムのどの能力を強化するかはイベント内容で自由に設定できます。 アイテムの強化についてはサンプルイベントを共通イベントの中にもおいてありますので、参考にしてみてください。 ''(注意)'' 強化したアイテムはそれぞれ別の種類のアイテムとして扱われます。 ゲーム定義>ルールと操作にて設定できるアイテム袋の容量は持てるアイテムの「種類」の数を指定できるようになっています。 すなわち強化したアイテムはそれぞれ"1種類"とカウントされることになります。 ---- *ミニマップ [#o77834b0] 画面上にオートマッピング付きのミニマップを表示しています。 マップ上に発見したドアや宝箱のアイコンも表示されるようにしました。 これらは下記の機能を組み合わせて実現しています。 **ミニマップの表示 [#c3eee726] レイアウトツールで文字列の描画用パネルに特殊書式\minimappreviewを指定するだけでミニマップは表示できます。 ミニマップのサイズや表示位置はパネルの設定が反映されます。 「ダンジョンRPGサンプル」では、レイアウトツール>イベント用フリーレイアウト画面にて”minimap”というレイアウトを作成し、そのレイアウトを共通イベントから呼び出すことでミニマップを表示しています。 **ミニマップの表示内容の設定 [#e04d351f] -ミニマップ上で通行可能/不可の箇所を表す色やグリッドの画面上のサイズ、オートマッピングをするかどうかは、ゲーム定義>[[ルールと操作]]>現在地マップの表示設定にて設定ができます。 -ミニマップ上のプレイヤーアイコンを「プレイヤーの向き」に応じて回転させるかどうかはゲーム定義>[[ルールと操作]]で設定できます。 -地形の上を通行できるかどうかについての設定はリソース>[[地形]]にて各地形ごとに変更できます。 -マップのどこまでをミニマップで表示するかについては、マップ設定>地図で設定できます。 演出などのために、プレイ中歩き回れる範囲を超えたサイズのマップを作ることはよくあると思います。 その際不要な範囲をマップに表示しないためにはここで設定をしてください。 **ミニマップ上のアイコンの設定 [#k7634711] -ミニマップ上のドアや宝箱のアイコンは、ゲーム定義>システムリソース>現在地マップで画像を設定します。 -システムリソースで設定した画像をどこで表示するかは、イベントシートで設定します。 サンプルゲーム内のドアのイベントをご覧ください。 閉じているとき、開いたときそれぞれのイベントシートの「シート実行時に変化する要素」>「グラフィック設定」>「マップ表示用画像」に画像が指定されています。 イベントシートごとにアイコンを設定できるようにすることで、状態に応じて表示するアイコンを切り替えることをできるようにしています。 ---- *足音の設定 [#d0f03dab] プレイヤーが地形・物体の上を歩いた際に足音を鳴らすことができます。 **地形への足音設定 [#je1ad4fc] リソース>地形のプロパティーにある「効果音」にて足音を設定できます。 **物体への足音設定 [#tea495c3] 物体の上を歩いた際の足音は、効果音を設定してある「地形」を割り当てることによって鳴らすことができます。 リソース>3D/2Dスタンプの簡易コリジョンのプロパティーにある「地形割り当て」にて、地形を指定してください。 「地形」に設定された「効果音」が適用されます。 -物体をイベント化した際もこの設定は有効です。 -「地形」に割り当ててある、上を歩いた際に付与される「状態」の変化も適用させることができます。 これを利用して、例えば、物体の上を歩くと「毒」状態になる、といったことができます。 //---物理設定ではコリジョンごとに割り当てる地形を変えることができます。 //これを利用して物体の中で足音の違う個所を作るといったこともできます。 **足音の音量や再生速度の調整 [#p5ca20c1] ゲーム定義>ルールと操作に足音のボリュームと足音の再生速度の設定があり、一律で変更することができます。 またイベントパネル「足音の設定変更」を使って変更することもできます。 個別の足音のボリュームを調整したい場合は、リソース>サウンドで使用している足音のボリュームを変更するとよいでしょう。 ---- *敵に駆け寄って攻撃 [#xb43cc49] バトルの攻撃時、モンスターに駆け寄って斬りつけるような表現はバトルイベントを使うことで実現できます。 - まず[[コモンイベントパレット]]でバトルイベントを新規で作成し、「駆け寄る」「戻る」という2つのイベントシートを作ります。 各シートで以下のようなイベントを設定します。 -- 「駆け寄る」シート ---「行動決定時」に、パーティキャストが何をするかを判定。 ---「攻撃」をするなら、攻撃対象の敵のナンバーを特定し、その敵を操作対象にしたうえで、操作対象にしたモンスターの座標を取得する。 ---攻撃をするキャストを操作対象にして、攻撃後の戻り先の座標としてキャストの座標を取得しておく。 ---モンスターの座標に向けてキャストを歩かせる。 ---最後にイベントスイッチをオンにして、駆け寄ったことを記録します。 -- 「戻る」シート ---「行動終了時」に、駆け寄ったことを表すイベントスイッチがオンだったら、攻撃をしたキャストを操作対象にします。 ---「駆け寄る」イベントシートで取得した、攻撃前のキャストの立ち位置の座標に向かってキャストを歩かせます。 ---最後に駆け寄ったイベントスイッチをオフにします。 -''[ポイント]'' -- このイベントを正しく動かすためには1.4.x以前のバージョンのバトルスクリプトをお使いの方は最新版への更新が必要です。 ''&color(red){バトルスクリプトに改変を加えらえれている方はバックアップを必ず取ってください。 };'' [[マップエディター メニューバー:https://rpgbakin.com/pukiwiki/?%E3%83%9E%E3%83%83%E3%83%97%E3%82%A8%E3%83%87%E3%82%A3%E3%82%BF%E3%83%BC%E6%A6%82%E8%A6%81#g26005fe]]にある機能>拡張機能の「バトル関連ソースをゲームファイルにコピーする」を使って、バトルスクリプトを最新版に更新してください。 改変を行っている方は、最新版へのマージをしてください。 -- 「戻る」 シートの「イベントの座標を指定して歩かせる」パネルの設定 ---「移動終了時の向き」は「任意の角度を向く」をONにし、角度は180度を指定すると、戻った後に敵のほうを向きます。 ---「モーションを変更しない」にチェックを入れることで戻った後に棒立ちにならなくなります。もしくは戻った後に「イベントのモーションを変更」パネルを使ってモーションを指定することもできます。 イベント内容については下記の画像を参考にしてください。 #ref(./駆け寄って攻撃_駆け寄る.png,80%) #ref(./駆け寄って攻撃_戻る.png,80%) ---- *連続ダメージ表現 [#p238537e] 一度のスキル攻撃で連続的にダメージを与える表現はコモンイベントを使うことで実現できます。 - まず[[コモンイベントパレット]]でコモンイベントを新規で作成します。 -- 「バトル情報を取得」パネルで使ったスキルの対象となる敵のナンバーを取得します。 -- あとは「バトルキャストのHP/MPを回復/減らす」パネルでそのナンバーの敵のHPを減らす→「指定した時間待つ」を繰り返します。 - 設定したイベントを、データベース>スキル>[[基本タブ:https://rpgbakin.com/pukiwiki/?%E3%82%B9%E3%82%AD%E3%83%AB#h3e7a611]]の「 呼び出す共通イベント」で指定してください。 -''[ポイント]'' -- このイベントで与えたダメージが表示された後、スキル自体に設定されたダメージが表示されます。 -- スキルエフェクトとイベントでのダメージ表示のタイミングを合わせたい場合は、イベントの中に適宜ウェイトを入れて調整してください。 イベント内容については下記の画像を参考にしてください。 #ref(./連続ダメージ.png,80%) ---- *レベルキャップ開放イベント [#m4aa8ae4] キャストや職業の最大レベルを設定した上で、イベントによってその最大レベルを変更させることができます。 [[キャストのステータスの変更:https://rpgbakin.com/pukiwiki/?%E3%82%B9%E3%83%86%E3%83%BC%E3%82%BF%E3%82%B9#a125ed1f]]パネルを活用します。 -まず最大レベルを設定します。 --ゲーム定義>[[ルールと操作]]にて、ゲーム内の最大レベルを設定します。 --データベース>キャストにてキャストの最大レベルを設定します。ここでは先ほどゲーム定義で設定した値以下で設定をしておきます。 -次にレベルキャップを解放するイベントを作成します。 --「キャストのステータスの変更」パネルで、キャストの「最大レベル」を取得し、新たな最大値を設定します。 「第一章が終わったら」や、「あるアイテムを手に入れたら」といったゲームの区切りにイベントを設定すると良いでしょう。 例えば下記のようなことを表現できるようになります。 ゲーム全体の最大レベルは99 ゲームスタート時のキャストAの最大レベルは20。 第一章が終わった時点でイベントによって最大レベルが50までアップする。 #ref(./最大レベルの変更.png,80%) ---- *地面から生えている草モデルを揺らす [#a823e5c6] a_n_wind_discard や a_n_rm_wind_discard、map_wind_discardなどのシェーダーを使って地面に生えている草が風で揺れているような表現ができます。 『Orb Stories』の3Dスタンプsb_obj_nature002_Grass01aのマテリアルsb_obj_nature002_Grass01a(sb_obj_nature002_Grass01a)を参考にしてみてください。 -リソース>マテリアル>シェーダーにて、上記のシェーダーを選択。その中の設定項目である「Y=0を固定するかどうか」をONにしてください。 根っこの部分は固定されたまま、草の部分が設定の度合いで風でなびくアニメーションにできます。 -ただしこれをONにしても思った通りにY軸が固定されない場合があります。 インポートするモデルについて、Blenderにて下記の設定されているかご確認ください。 1)モデルの制作時に"原点"を根っこの部分に設定する。 2)BlenderからのFBXエクスポート時の設定項目「トランスフォーム>トランスフォームを適用」にチェックを入れる。 ---- *スキル発動時のカットシーン [#w0ee7f8c] 下記のような設定をすることで、スキル発動時にスプライトアニメーションを使ったカットシーンを挿入することができます。 #ref(./Skill_Cutscene.png,30%) - スプライトツールでスプライトを作成する - 共通イベントでカットシーン用のイベントを作成する イベント開始条件は「開始条件なし」 「感情マークを表示」パネルで先ほど作成したスプライトを指定する。 表示位置を設定し、「完了するまで待つ」にチェックを入れてください。 - データベースでスキルを作成する。 - データベース>[[スキル]]>基本タブ>スキルの効果で「呼び出す共通イベント」を効果に設定し、先ほど作成した共通イベントを指定する。 - 同じくスキル>基本タブ>基本設定で「共通イベント後に発動」をオンにする #br 「感情マークを表示」パネルの「完了するまで待つ」と、スキル>基本設定「共通イベント後に発動」が正しく設定されていないと、スプライトアニメーションの終了を待たずスキルが発動してしまうことに注意してください。