RPGツクールMZで敵がプレイヤーを発見したら追いかけてくるイベントの作り方
こんにちは。
今回はプレイヤーを追いかけてくる敵イベントというか、イベントが視界を持ち、その視界内にプレイヤーが入った場合追いかけてくる、鬼ごっこ的なイベントの作成テストです。
今回はRPGですので、フリーゲームで有名な青鬼的なものではなく、マップ上にシンボルエンカウントとして存在するバトルイベントですね。
作成したイベント
ということで作ってみました。
視界を表示していますがこれはテスト用で、実際には消すつもりです。
(敵の視界が見えるのはメタ的な表現になるので、採用するかどうかは判断の分かれるところというか、ゲームや世界観によって合う合わないがあると思います。)
あと、見失った時の?フキダシも消す予定。
わかりやすくはあるんですが、ある種、敵の気持ちがわかってしまうのはプレイヤーに安心感を与えてしまうんですよね。
今回の作品は妖怪の住処に連れ去られた…というていなので、敵をきちんと撒けたかどうかハッキリしすぎない方が臨場感があって良さそう。
ハテナマークもちょっとおマヌケ感あるしね。
使用したプラグイン
使用したプラグインはこちら。
Artemis様のARTM プレイヤー探索MZ - ARTM_PlayerSensorMZ.js
プレイヤーを追いかけてくるシンボルエンカウントを作るだけならツクールMZのデフォ機能でも作れるのですが、このプラグインを使うことで
- 制作が簡単になる
- イベント管理がしやすくなる
といったメリットがあります。
プラグインの設定
まずはプラグイン側の設定です。
こんな感じでいくつかパラメータを設定できます。
とりあえずプレイヤー発見時に!フキダシを表示するよう設定します。
プレイヤーロスト時には?フキダシを表示するよう設定
あとは発見後操作スイッチとか、両隣の視界とか、視界範囲描画のON/OFF、隊列歩行時にプレイヤーのフォロワーを無視するかどうか、マップ移動時に追跡状態をリセットするかどうか、あたりがよく使われそうなところでしょうか。
いろいろ設定できて便利ですね。
敵イベントの作成
続いてマップに敵イベント(シンボルエンカウント)を作成します。
まずはイベントのメモ欄に <PsensorF:5 Ld60> と記述。
PsensorF:5 はこのイベントが持つ視界の範囲を設定しています。イベントの前方5マス、さらにその地点から左右に5マスの点をそれぞれ結んだ三角形の範囲がこのイベントの視界となります。
Ld60はこのイベントの視界からプレイヤーが離脱した時、イベントがプレイヤーをロストするまでの遅延フレーム数です。60フレームだと1秒です。
こちらはプレイヤーを発見していない時のイベントなので、イベント設定の「自律移動」はランダムにしておきます。
続いて右上にある「EVページコピー」から「EVページ貼り付け」で、このイベントの2ページ目を作ります。
「出現条件」をセルフスイッチDに。出現条件はプラグイン設定で選んだ「発見後操作スイッチ」にします。
こちらはプレイヤー発見後のイベントなので、イベント設定の「自律移動」は「カスタム」>「ルート」>「スクリプト」から次の命令をコピペします。
this.moveStraight(this.findDirectionTo($gamePlayer.x,$gamePlayer.y));
「自律移動」はツクールデフォルトの「近づく」にしてもいいのですが、ちょっとマヌケな感じになってしまうので、プレイヤーがタップした時に移動する経路探索をスクリプトで指定しています。
プレイヤー探索イベントの作成
最後にプレイヤーの座標を探索するイベントを作成します。
先程の敵シンボルイベントとは別に、イベントを新規作成します。
「プラグインコマンド」から「ARTM_PlayerSensorMZ」>「探索開始」
イベントの一時消去
を設定。
これはプラグインを使わずに似たような機能を作ってみるとわかるのですが、敵シンボルイベントとは別にプレイヤーやイベントの座標を取得、管理するイベントが必要なんですね。
これはそれ用のイベントでしょう。
ということで「RPGツクールMZで敵がプレイヤーを発見したら追いかけてくるイベント」の完成です。
余談(ツクールMZのデフォ機能で作った場合)
完全に余談なのですが。
※余談なのでわかる人にしかわからない説明になっちゃうけど許して
最初このイベントならデフォ機能だけで作れるだろうと思って作ってました。
実際作れないことはないのですが、前述のとおりプラグインを使った方が
- 制作が楽
- イベント管理も楽
というのがあって結局プラグインを使う方法で実装しました。
ツクールのデフォ機能で作る方法はいくつかあるのですが、例えば次の方法だと
敵シンボルイベント単品で作ることができるのですが、プレイヤーとイベントの座標の差分1以下だとほぼ2マスで接触判定されてしまい、ユーザー体験が悪く、座標の差分1未満にすると機能しません。
となるとプラグイン使用時と同様に、シンボルイベントの方は「トリガー」を「イベントから接触」にして、プレイヤーとイベントの座標を取得・比較するイベントは別途用意する必要がある。
しかし別途用意するとなると、イベントの座標は「このイベント」ではダメで、対象のイベントの座標を指定する必要がある。
そこまではいいのだけど、マップ上にイベントが複数あるとそれぞれの座標を取得する必要があり、それぞれのイベントとプレイヤーの座標差分も計算する必要があるので変数もその分だけ必要になる。(マップに配置するシンボルが最大3つなら3つ、X座標とY座標と差分の和で3つ必要なので3×3で変数9個)
なるほどめんどくせーし管理しづらいな、ということでプラグインを探して今回の方法に行き着きました。
毎度のことながらプラグイン制作者の方々には頭が上がりません。
ありがたいことです。