Unityに関連する記事です

 バフやデバフを適用するには、どのタイミングで適用するかが大切です。
この手順では、エネミーから攻撃を受けた際に、指定された確率でデバフのコンディションを付与する場合の実装例を提示します。
次の手順では、ステージ内にシンボルを配置し、そのシンボルに侵入した際にバフ/デバフのコンディションを付与する処理を実装します。


エネミーから攻撃を受けた際に、指定された確率でデバフのコンディションを付与する場合


設計


 バトルにおいてエネミーから攻撃を受けた場合に、エネミーごとに設定してある確率によって、デバフ効果を受けるようにする設計を行います。

 処理の流れは次のようなものを検討します。

 1.エネミーから攻撃を受けた際、PlayerController クラスの OnTriggerEnter メソッド内に、デバフの判定機能をメソッドとして追加する

 2.エネミーにデバフを付与する設定がある場合、乱数をつかって、指定された確率であるかどうかを判定する
   このときに、指定確率以下になった場合、デバフを付与する。その場合、GameData クラスのデバフ付与予定の List に記録し、バトル内ではデバフ付与については一旦保留にする
   GameData クラスのインスペクターで確認すること

 3.バトル終了後、ステージに戻った際に、Stage クラスの OnEnable メソッド内に、、バトルでデバフを付与されていないかを判定する機能をメソッドとして追加する

 4.GameData クラスのデバフ付与予定の List にデバフが登録されている場合、そのデバフの種類を特定して、該当するデバフを MapMoveController クラスに付与し、適用しているデバフの List に追加する
   この処理を、List 内にあるデバフすべてに繰り返す

 5.デバフのコンディションを付与した際に、エフェクトがある場合には、そちらを生成する

 6.MapMoveController クラスのインスペクターを確認し、適用しているデバフのクラス、および、 List 内にデバフが追加されているかを確認する

 7.ステージを移動し、デバフの適用時間が1マス移動するごとに1ずつ減少することを確認する。0 になったら、デバフのクラスが削除されて、デバフ状態が解消されることも確認する

 事前の準備として、GameData クラスに、バトル内で付与されたデバフの種類を登録しておくための List を作成します。
デバフはステージシーンに戻ってから適用されますので、GameData クラスに登録しておくことで、バトルシーンから遷移した後でも情報を利用できます。

 また、エネミーの情報を管理するために、スクリプタブル・オブジェクトを利用して、エネミー用のデータベースを作成します。
こちらにエネミーごとにデバフの設定も行えるようにします。

 これらが完成したら、スクリプトを修正し、バトル内でのデバフ判定、ステージシーンに移行してからのデバフの適用の処理を実装します。


GameData スクリプトを修正する



GameData.cs

<= クリックすると開きます



EnemyData



EnemyData.cs

<= クリックすると開きます





EnemyDataSO スクリプトを作成する


EnemyDataSO.cs

<= クリックすると開きます



EnemyDataSO スクリプタブル・オブジェクトを作成する


 Datas フォルダを作成し、その中で右クリックをしてメニューを開き、Create => Create EnemyDataSO を選択します。
新しく EnemyDataSO スクリプタブル・オブジェクトが作成されます。名前はそのままで問題ありません。

 エネミー1体ずつのデータを登録できます。また、debuffDatas 変数に、プレイヤーに付与するデバフの種類と確率の設定が行えます。
debuffDatas 変数の Size は 0 なっていますので、この場合、デバフはないエネミーになります。デバフを設定したい場合には Size を 1 以上に変更し、
各 Element 内にデバフの種類と確率を登録します。


インスペクター画像



 デバフのコンディションの設定できる debuffDatas 変数は配列になっていますので、debuffDatas 変数のSize を 2 以上にすることで複数のデバフの設定が可能です。





DataBaseManager スクリプトを修正する



DataBaseManager.cs

<= クリックすると開きます


 続けて、コンディション用のデータベースも作成します。こちらを参考にして作成してください。


PlayerController スクリプトを修正する


 バトルシーンで利用している PlayerController クラスを修正します。
OnTriggerEnter メソッドの処理に、デバフの確認用の処理を追加します。
実際にデバフの判定を行う処理はメソッド化して、そちらを利用します。


PlayerController.cs

<= クリックすると開きます



MapMoveController スクリプトを修正する



 Start メソッドでデバッグ用に設定していた処理をコメントアウトしておきます。

 コンディション用の処理を役割に合わせてメソッド単位でまとめておいて、それを追加します。



MapMoveController.cs

<= クリックすると開きます





Stage スクリプトを修正する


 OnEnable メソッド内の TODO 1つと、CheckTurn メソッド内の TODO 2つを実装します。
この部分にはメソッドの呼び出し命令を実装するため、新しく3つのメソッドを追加しています。

 このクラスにおいて、実際に MapMoveController クラスに対してバトルで付与されたデバフの効果を適用しています。


Stage.cs

<= クリックすると開きます



ゲームを実行して動作を確認する


 設計部分の処理の流れ通りにゲームが動くかを確認します。

 現在の設計では、同じ種類のデバフを適用する場合、効果時間が延長されます。
そのままでも問題はありませんが、必要に応じて、実際にエネミーからの攻撃や、適用する確率なども調整しながら、1回のバトルで同じデバフは重複しないようにするなどの修正を適宜行ってください。

コメントをかく


「http://」を含む投稿は禁止されています。

利用規約をご確認のうえご記入下さい

Menu



技術/知識(実装例)

2Dおはじきゲーム(発展編)

2D強制横スクロールアクション(発展編)

3Dダイビングアクション(発展編)

2Dタップシューティング(拡張編)

レースゲーム(抜粋)

2D放置ゲーム(発展編)

3Dレールガンシューティング(応用編)

3D脱出ゲーム(抜粋)

2Dリアルタイムストラテジー

2Dトップビューアドベンチャー(宴アセット使用)

3Dタップアクション(NavMeshAgent 使用)

2Dトップビューアクション(カエルの為に〜、ボコスカウォーズ風)

VideoPlayer イベント連動の実装例

VideoPlayer リスト内からムービー再生の実装例(発展)

AR 画像付きオブジェクト生成の実装例

AR リスト内から生成の実装例(発展)

private



このサイト内の作品はユニティちゃんライセンス条項の元に提供されています。

管理人/副管理人のみ編集できます