NPCの動きを主人公と同期させたい

アバター
甘辛みかん
記事: 24
登録日時: 2020年6月01日(月) 13:26

NPCの動きを主人公と同期させたい

投稿記事by 甘辛みかん » 2021年9月15日(水) 00:16

画面内に主人公とNPCのA・B・C・D・E・Fが任意の場所に散らばっている状態として、主人公が一歩動くとNPCも一歩動くようにしたいです
その上で、NPCのA・B・Cは主人公と同方向に一歩移動、D・E・Fはランダムに一歩移動というようなシステムを作りたいのですが可能でしょうか

わかる方いらっしゃいましたら教えていただけると嬉しいです
よろしくお願いいたします

とんぼ
記事: 6
登録日時: 2021年8月07日(土) 22:11

Re: NPCの動きを主人公と同期させたい

投稿記事by とんぼ » 2021年9月15日(水) 17:54

2つ簡単に思いついたので解答しときます。
---------------------------------------------------------------
this.character(-1).isMoving()
でプレイヤーが移動中かどうかを判定できます

並列処理
条件分岐:this.character(-1).isMoving()
ー条件分岐:プレイヤーの向き
ーー移動ルートの設定

これで実装できます。
注意点は、プレイヤーが移動してるかどうかで判定してるので、プレイヤーとイベントの移動速度が違うと、思った動きにならないことです。
プレイヤーは2マス移動してるのに、イベントは1マスしか移動してない。とかになります。
---------------------------------------------------------------
もう1つは歩数とセルフ変数を使ったものになります。
歩数とセルフ変数の値が違った場合、イベントを動かします。

先ず何でもいいのでセルフ変数が扱えるプラグインを導入します。
今回はトリアコンタン様のTemplateEvent.jsで説明させてもらいます。

そしたら、イベント出現時に
this.controlSelfVariable(0, 0, $gameParty.steps(), false);
でセルフ変数に現在の歩数をセットします。

あとは並列で監視するだけです。

条件分岐:this.getSelfVariable(0) != $gameParty.steps()
ーthis.controlSelfVariable(0, 1, 1, false);
ー条件分岐:プレイヤーの向き
ーー移動ルートの設定

こちらは1つ目の注意点を解決できています。
ただ、やはりプレイヤーとイベントの速度が違うと問題になることがあります。
このままだと、プレイヤーの動きをトレースしているのではなく、条件分岐が処理された時点のプレイヤーの向きを参照にしているので、高速で縦横無尽に動き回るとイベントは進行方向を変えて移動してしまいます。
(一応完全トレースもできますが、私のコードだと美しくないと思うので、控えさせてもらいます)
あと、$gameParty.steps()の値を別の箇所で変更したりすると、このままでは動かないと思うので、扱いに注意してください。
---------------------------------------------------------------
とりあえず、プレイヤー速度=イベント速度なら、この2つのどちらでも大丈夫だと思います。
専門家ではないので、他に注意点などがあったら他の方で補足していただけると助かります。
アバター
甘辛みかん
記事: 24
登録日時: 2020年6月01日(月) 13:26

Re: NPCの動きを主人公と同期させたい

投稿記事by 甘辛みかん » 2021年9月15日(水) 23:30

ややこしい質問に丁寧な説明ありがとうございます
難しいですが、順番に試していきたいと思います
ありがとうございました

“MV:質問” へ戻る