前回は、Fungusを使ってDQ風の会話イベントを実装しました。
その後、ゲームを実行してみて気づいたのが、会話中のプレイヤーが動かせてしまう問題と、コマンド画面を開けてしまう問題です。また、コマンドを開いている状態で自由に動けるのも良くないので修正してみます。
コマンド画面の実装については、1から作ると非常に難しいので、今回は大分ネットの情報を参考にさせて頂きました。私は、Canvasを組み合わせて作りましたが、やり方は人それぞれだと思いますので興味のある方はネットで調べてみてください。
会話中はプレイヤーを停止させコマンド画面も開かないようにする【Unity】
コマンドを管理する際に便利なのが列挙型です。RPGを制作する上では、とても重要な役割を担いますし、何よりもプログラムを簡潔化できます。
というわけで、まずはプレイヤースクリプトから修正します。
プレイヤーの状態を識別する列挙型Stateを作ります。
現状戦闘シーンなど作っていないので、通常時である「Normal」と会話中にあたる「Talk」とコマンドを開いた状態にある「Command」しかありませんね。他の状態が増えた際は、ここに記述していけばOKです。
「Time.timeScale = 0」を使ってプレイヤーの動きを止めようとすると、Fungusの会話イベントがまともに実行されませんので今回は使いません。
その代わりとして「stopf」というフラグを用意して、1ならば動かせる状態に、0ならば動かせないようにします。
現時点では、「Normal」の状態だけ1にしてそれ以外なら0にしています。
後は、各スクリプトからSetStateメソッドにプレイヤーの状態を引き渡せば良いですね。
前回作成したNPCControllerを修正します。
やってることはとても単純ですね。会話イベントが発生したらTalkをセットして、終了したらNormalに戻してあげるだけです。
コマンド画面に関しても同様に、表示した際にCommandに切り替えて画面を閉じたらNormalに戻す処理を記述すればOKですね。
ゲームを実行するとこんな感じになります。会話イベント発生中はキー入力でプレイヤーが動きません。アニメーションが止まっていることからも分かると思います。コマンド表示中も然りですね。