kuront’s blog

主にUnityでのゲーム制作やってます。

【Unity】RPG制作 その17-プレイヤー移動したら一定の確率で敵とエンカウント

 前回は探索ステージのマップを制作しました。今回はプレイヤーの移動ボタンを押したら一定の確率で敵をエンカウントするようにします。
 プレイヤーのマップ移動を実装するまでは、「進む」ボタンを押したらエンカウントするかどうかを処理していましたが、それを4方向の移動ボタンを押した時に実行させようと思います。まずはじめに、questManagerを開いて、処理を追加していきます。

 


クリックで展開

 新しくMoveOnRoom関数を作成していますが、OnNextButton関数に関数の処理が終了した時の処理を登録しているだけであとは「進む」ボタンを押した時に実行されていたOnNextButtonと一緒です。

[SerializeField] UnityEvent OnCompleteMoveRoom;

 関数の入れ物を定義しておきます。SerializeFieldにしてインスペクターから設定できるようにします。MoveOnRoom関数のはじめにOnCompleteMoveRoomのインスタンスを生成し、関数の最後のOnCompleteMoveRoom.Invoke();で登録された関数の呼び出しを行っています。
 次にDangeonMap.csにOnCompleteMoveRoomに登録する関数を作成します。

 


クリックで展開

 新しくHideDangeonMapForSearching関数とShowDangeonMapForSearching関数を用意しました。QuestManagerのOnCompleteMoveRoomにはShowDangeonMapForSearching関数を登録しておきます。そしてDangeonMapControllerにいって、プレイヤー移動ボタンを押した時にこれらの処理が実行されるように組み込みます。

 


クリックで展開

プレイヤー移動時に、元々マップが表示されていれば、移動後にサイドマップを表示するようにしました。実行すると以下の動画のようになります。

youtu.be

通常時はOKなのですが、戦闘に突入した時にマップが表示がされたまま(探索時のコマンドも)になってしまっているので、次はそれを直していきます。

 


クリックで展開

 QuestManagerに戦闘中かどうかのフラグを宣言します。そのフラグをEncountEnemy関数の処理に入る前にtrueにし、EndBattle関数の中でfalseにします。そして、MoveOnRoomコルーチンの最後で、nowBattleがfalseの場合(戦闘に突入しなかった時)に OnCompleteMoveRoomの登録された関数を実行しています。EndBattle関数の中でも呼び出しています。
 それから敵に遭遇した時にマップを表示している場合はCancelButtonとArrowsButtonsを非表示にしたいので、StageUIManager.csに処理を追加します。

 


クリックで展開

Searchingが終わった時に呼び出す新しい関数を作りました。dangeonMapが開いているときはcancelButtonとArrowButtonsをtrueにし、そうでないときはStageUIManagerのShowButton関数を実行するようにしています。
あとはQuestManagerのSearchingコルーチンとEndBattle関数内のstageUI.ShowButtons関数をstageUI.ShowButtonsForSearchingに差し替えれば終わりです。これでプレイヤー移動と敵とのエンカウント処理をうまくつなげることができました。

今回は以上です。次回はマップの特定の位置にたどり着いたらイベントを発生させる処理を作っていきたいと覆います。