モデルズリストについて


Ver. 0.3.4

モデルズリストとは?

RPGツクールはその仕様上、動的にオブジェクト(イベント)を生成したり、それらを個別に制御するようなコマンドは用意されていません。(例えば、シューティングゲームで自機が撃った弾丸の制御や、不特定多数の敵機の制御など)

そこで、このプラグインには「モデルズリスト」という 画期的な 機能が備えられており、この機能を利用することで、3Dシーン内に生成された複数のモデルを、RPGツクールの「ループ」コマンドで簡単に制御することができるようになります。

モデルズリストの使い方

1.モデルズリストの作成

まず最初に「Set ModelsList モデルズリストを設定」コマンドでモデルズリストを作成します。

このコマンドには次のような引数があります。

■ ModelsList Name モデルズリスト名
作成するモデルズリストの名前を入力します。
名前は自由につけることができるので、分かりやすい名前をつけましょう。
既存の名前を入力するとリストが更新されます。

■ Parent Model Name 親モデル名
特定の親の子だけをリストの候補にしたい場合に入力します。
空白だとシーン(_Scene)の子がリストの候補になります。

■ Forward Match of Child Model Name 対象子モデル名(前方一致)
リストの候補になっている子を、さらにモデル名で絞り込みたい場合に入力します。
前方一致なので、例えば「_Event」と入力すると、「_Event1」や「_Event99」などもリストに含まれることになります。
空白だとすべての子がリストに含まれます。

■ Include descendants 子孫も含む
「ON」に設定すると、リストに含まれた子の子も同じ条件で評価していきます。

これらの引数を駆使し、モデルズリストに含みたいモデルを指定してください。

なお、モデルズリストを利用する上で、ひとつ注意点があります。
モデルズリストに含まれるのはモデル名だけです。そのため同じモデル名をもつモデルが複数含まれるようにすると、理想通りには機能しなくなります。

引数の設定例

例えばこんなシーンがあったとして……
_Scene
├ モンスターA
 ├ 頭
 ├ 腕1
 ├ 腕2
├ モンスターB
 ├ 頭
 ├ 腕1
 ├ 腕2

◆ モンスター(2体)のリストを作成したい:

「ModelsList Name モデルズリスト名」=モンスターリスト
「Parent Model Name 親モデル名」=(空白)
「Forward Match of Child Model Name 対象子モデル名(前方一致)」=モンスター
「Include descendants 子孫も含む」=OFF

と設定することで「モンスターA」と「モンスターB」を含む「モンスターリスト」というモデルズリストが作成されます。

◆ モンスターAの両腕だけのリストを作りたい:

「ModelsList Name モデルズリスト名」=モンスターAの腕リスト
「Parent Model Name 親モデル名」=モンスターA
「Forward Match of Child Model Name 対象子モデル名(前方一致)」=腕
「Include descendants 子孫も含む」=OFF

と設定することで「モンスターA」の「腕1」と「腕2」だけが含まれる「モンスターAの腕リスト」というモデルズリストが作成されます。

2.モデルズリストをループで使う

作成したモデルズリストと「ループ」コマンドを組み合わせれば、リストに含まれるモデルをひとつずつコマンドで制御することができます。

基本的な使い方例:

この例では「TreeList」に含まれる個々のモデルに対し「Model Same As Model モデルの位置や角度などを対象モデルと同じにする」コマンドを実行しています。

いきなり例を見せられても「はぁ?」って感じだと思うので、ひとつずつ説明していきます。

まず、ループを開始する前に「Select First 最初のモデルを選択」コマンドを実行します。
これは、モデルズリストには見えない選択カーソルがある、と思ってもらうと理解しやすいかと思います😅
その見えない選択カーソルで、リストの最初のモデルを選択した状態にします。

そして、次にループを開始しています。

ループ内の最初には、ループを終了するための条件分岐が組まれています。
ここの条件で使用されている「script3d.modelsListReachedEnd()」スクリプトは、モデルズリストの見えない選択カーソルが最後のモデルを越えていると True を返します。


この例の場合は、「TreeList」に含まれる最後のモデルを見えない選択カーソルが越えている、という条件になります。

【たぶんどーでもいい話】
もしかしたら、ループの最後にループ終了の条件分岐があったほうが分かりやすいと思う方もいるかと思いますが、そうすると何も含まれていないモデルズリストをループしたときに死ぬので、ループの最初に選択が越えたことでループが終了する条件分岐を置くようにしています。

次に、「Selected Name 選択モデル名を変数へ代入」コマンドで選択中のモデル名を指定した変数へ代入しています。
なんかいちいち手間ですが、こうすることで制御文字(\V[n])で、選択中のモデル名を取得できるようになります。

そしてようやく次のコマンドから、選択中のモデル名に対して実行したいコマンドを組んでいきます。
この例では、「Model Same As Model モデルの位置や角度などを対象モデルと同じにする」コマンドを、対象のモデル名を制御文字で設定して組んでいます。

そして最後に、「Select Next 次のモデルを選択」コマンドで見えない選択カーソルを次へ進めます。
引数には対象のモデルズリスト名を入力してください。
このコマンドやモデルズリスト名の入力を忘れると、無限ループになってしまうので注意してください。

以上、モデルズリストの使い方説明でした。
このコマンドの利用例を、実際のツクール上でご覧になりたい方は、サンプルプロジェクトの「ModelsList」マップのイベントを参照してください。

RPGツクールのループ激重問題

なんだ急にディスり始めたぞ?と思うかもしれませんがそんなつもりはありませんw
これはツクールが使いやすくて柔軟性のあるツールであるためには、仕方のないことだと思います。

しかし、100回ループさせた程度でカクカクされてしまうとちょっとツラいので、ループを可能な限り減らせるように対策を検討中です。
既に「Resolve Collisions With ModelsList モデルズリスト間の衝突を解決」コマンドのように、直接モデルズリストが指定できるコマンドもあります。
これにより複雑なループ処理を構築する必要がなくなり、さらに処理速度の向上も見込めます。
今後は既存のコマンドも含め、モデルズリストを直接指定できるように改善していければと思っています。

Get 3D Plugin for RPG Maker MZ and MV (PNDK 3D)

Download NowName your own price

Leave a comment

Log in with itch.io to leave a comment.