kuront’s blog

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

【Unity】RPG制作 その12-回復アイテム使用処理(戦闘中)

 前回は探索中にアイテムを使用する処理を実装しました。今回は戦闘中にアイテムが使えるようにしたいと思います。ItemUiは探索と戦闘の両方同じスクリプトで呼び出しているのですが、実際にボタンを押した時の挙動については戦闘時と探索時で変えたいです。現在が探索中か戦闘中かの状態は、GameManagerのGAMEPHASEが保持しているので、GAMEPHASEを使って処理を分岐させます。
 現状、戦闘中にアイテムコマンドを押すと、アイテムのリストが表示されて、回復アイテムであれば実際に使う事ができるのですが、敵とプレイヤーの行動順に関係なく即座に使えてしまい、さらに敵のターンの処理が回ってこず再度プレイヤーが行動を選べてしまいます。あと探索時のアイテム処理と共有しているので使用後に探索コマンドも出てしまいます。

f:id:kuront:20210928212451p:plain

f:id:kuront:20210928212500p:plain

f:id:kuront:20210928212508p:plain

f:id:kuront:20210928212517p:plain

f:id:kuront:20210928212525p:plain

f:id:kuront:20210928212533p:plain

f:id:kuront:20210928212543p:plain


 探索コマンドのバグはすぐに直せます。gamePhase==QUESTの場合のみ探索コマンドを表示するようにすればいいだけです。

 アイテム使用後は「やめる」ボタンを表示しないようにしたいので、ItemEventでCommandUIManagerの処理を実行できるように、ItemUsePanelでItemEventコンポーネントを追加する時に、CommandUIManagerを渡すようにします。あとgamePhaseがBATTLEのときはbuttonState.onClick.AddListenerで別の関数を登録するようにします。



 


クリックで展開

それからCommandUIManager.csで戦闘中のキャンセルボタンを非表示にする関数を定義しておきます。

 


クリックで展開


 itemEvent.csに戦闘中に回復アイテムを使用する関数を定義します。とりあえずその関数の一番初めに「やめる」ボタンを非表示するようにしておきます。

 


クリックで展開

 UseHealItemOnBattleには状態異常の回復処理や、ステータスの強化処理なども入れておきました。これらはまだ完全には実装されていないので、戦闘中に効果を及ぼすことはないですが、状態異常解除やステータス強化のメッセージは表示されるようになっています。

 これでうまくいくのかと思いきや残念ながらうまく動きませんでした。理由は不明ですが、アイテム使用後のメッセージを表示する際のコルーチンのWaitForSecondのところで止まってしまいます。

youtu.be