i-school - コンディション機能の実装

設計


 2Dパートのプレイヤーのゲームオブジェクトに対して、プレイヤーのコンディション状態をゲーム内に反映する機能を実装します。

 コンディションの機能については、コンディション用のスクリプトをアタッチすることによってコンディション機能を実装します
次の手順では、コンディション用のエフェクトの作成方法と、エフェクトの生成方法を学習します。

 コンディション用のスクリプトは、クラスの継承を利用して作成する設計にします。
 親クラスとして PlayerConditionBase クラスを作成し、子クラス間で共有する変数の情報や、コンディションの付与した際の動作などを記述しておきます。
この際、基本的なスクリプト内の動作はすべて親クラスにあるメソッドを利用することで、すべてのコンディションの処理を一本化して管理できます。
コンディションがアタッチされた際にはこのメソッドを実行する、処理の内容についてはこのメソッドに記述して実行する、というように
メソッドの役割を明確にして用意しておいて、それを子クラスが必要に応じてオーバーライドすることで振る舞いを変える形式で実装していきます。

 子クラスには、それぞれのコンディション(例えば、毒や睡眠といったステート変化、攻撃力低下などのデバフ効果)を記述するようにします。
この部分の振る舞いを変えることによって、同じ親クラスを持った状態で各コンディションの機能を作り出すことができるようになります。


ConditionType


 バフ効果、デバフ効果、ステート効果なども含めてすべてこちらの enum 内に列挙子として登録しておきます。


ConditionType.cs

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



PlayerConditionBase


 コンディションの機能の親クラスになります。すべてのコンディション用のクラスは、この PlayerConditionBase クラスを継承して作成します。

 変数の宣言についてはすべて protected 修飾子を利用しています。これは親子間で共通して利用するためです。
当然、必要に応じて public 修飾子を利用することもできますが、今回はたまたまないだけです。

 メソッドについては、public 修飾子と protected 修飾子を利用しています。
public 修飾子は外部クラスからの呼び出し命令を受ける前提で実装し、protected 修飾子は親子間で利用することを前提で実装しています。

 virtual 修飾子を用いているメソッドは子クラスでのオーバーライドを想定した実装になっています。

 処理内に次の手順で実装するコンディション用のエフェクトを生成する処理なども含まれていますので、
現時点ではその部分(変数の宣言やメソッド内の処理)は TODO にして記述せずにおくか、書いておいてコメントアウトするかしておいてください。
(そうしないとエラーが出ます)


PlayerConditionBase.cs

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



PlayerCondition_Fatigue


 PlayerConditionBase クラスを継承した子クラスの実装例です。

 Fatigue は疲労ステートのことで、この状態になった場合、プレイヤーの攻撃力を指定した分だけ減少させる効果を持ちます。

 基本的なコンディションの機能については、親クラスである PlayerConditionBase クラスに記述してありますので、
子クラスについては、新しく必要になる変数やメソッドを追加したり、親クラスにある virtual 修飾子のメソッドをオーバーライドして処理の内容を上書きします。

 こうすることによって、各子クラスがメソッド内の振る舞いを変えることができるため、このクラスではプレイヤーの攻撃力を指定した分だけ減少させる効果を適用するようにします。


PlayerCondition_Fatigue.cs

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




MapMoveController


 プレイヤーの情報を管理している MapMoveController クラスに、現在のコンディションの情報を管理するためのリストの情報と
コンディションが付与されたときに表示するエフェクトを配置する位置情報を設定できるように、変数を2つ追加します。

 Start メソッドに、デバッグ用の処理を記述します。ゲームが実行されたタイミングでコンディション用のクラスを付与し、効果が適用されるようにして確認します。


MapMoveController.cs

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



Player ゲームオブジェクトにコンディションのエフェクトを生成する位置を作成する


 Stage シーン内にある Player ゲームオブジェクトを選択し、子オブジェクトを作成します。
名前を ConditionEffectTran に変更します。
このゲームオブジェクトの位置にコンディション用のエフェクトを生成するようにします。
そうすることにより、すべてのコンディション用のエフェクトの生成位置を同じ位置に設定できます。


ヒエラルキー画像



インスペクター画像



<エフェクト実装時の状態>