kuront’s blog

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

【Unity】RPG制作 その32-特技の実装3 特技の効果対象による処理分岐、コードの整理

今回は特技の効果対象によって敵を複数回攻撃したりランダムで攻撃したりできるようにしていきます。
SpecialEvent.csのIEUseAttackSpecialコルーチンに処理を描いていきます。現状条件文の中の実行コードがかなり長くなっており、処理全体の見通しが悪くなっているので、実際に処理を行う部分を関数にします。

 


クリックで展開

SpecialEvent.csのIEUseAttackSpecialコルーチンの処理を作成した関数に置き換えます。

 


クリックで展開

 これで攻撃特技の処理が分かりやすくなります。specialDataのactivateCount(特技の発動回数)分For文でループさせるようにしたのでこれで複数回攻撃の実装ができます。
敵をランダムに攻撃する処理を作るのに当たって、Dictinary型からランダムにKeyを取得する処理を使いたいと思います。Dictionary自体にそういった機能持つメソッドが用意されていない(多分)ので、ネットで調べた方法でDictinaryからランダムにKeyを取得できるようにします。こちらのサイトを参考にさせていただきました。

baba-s.hatenablog.com

Dictionary型の拡張メソッドクラスDictionaryExtクラスを作成します。

 


クリックで展開

このクラスをプロジェクト内に置いておけばプロジェクト内のコードのDictionary型は全て拡張メソッドを使えます。

 


クリックで展開

効果対象がOneOfEnemyAtRandom(ランダムに敵一体)の時にbattleManagerのenemysListからKeyをランダムに取得して敵を攻撃する処理を入れました。PlayBattleEffectWhenRandomコルーチンで攻撃する敵の場所にエフェクトが再生されるようにしています。OneOfEnemyAtRandomAttackSpecialProcessコルーチンでランダムに敵一体を攻撃する時の処理を行っています。もし途中で敵を撃破した場合はbattleManagerのEnemyDeath関数を実行してたおした敵にまた攻撃しないようにします。そしてIEUseAttackSpecialコルーチンのfor文の最後でbattleManager.CheckAllEnemyDeathを行い敵が全て倒された場合はfor文を抜けてそれ以上攻撃が実行されないようにします。
IEUseAttackSpecialコルーチンの最後で再度battleManager.CheckAllEnemyDeathをし、trueなら戦闘終了処理をします。battleManagerの
StartPlayerTurnコルーチンの最後にも戦闘終了処理があるので、そちらはisBattleEndがfalseの場合に実行されるようにし、EndBattleが2回実行されないようにします。

 


クリックで展開

 これで戦闘テストをしてみます。

youtu.be

 今回は以上です。