【TopDown Engine】Damage Type(状態異常)のやり方

炎ダメージを受けた時 TopDownEngine
スポンサーリンク

前書き

2024年4月現在、TopDownEngineの最新バージョンはver3.6(The Old Machine)になっています。日々、TopDownEngineも更新されているため、今までなかった機能も新しいバージョンになったら追加されているなど多々あったりします。

今回はそんなTopDownEngineの中で新たに追加された機能「Damage Type」(状態異常)について紹介していこうかなと思います。この機能はver.3.0で追加された機能ですが以下の動画にあるようにダメージを受けた時にキャラクタが炎のエフェクトを纏ったりするように、ダメージに一定の状態を付与する機能になります。

TopDownEngeinのデフォルトとして「火」、「電気」、「氷」、「毒」の状態異常が準備されているため、まずはそれらがどのように設定されて、キャラクタに反映されているかを紹介していこうと思います。

TopDonwEngineのリリース情報については以下に記載があるため気になる方は一度ご確認をしてみてください。

TopDown Engine Releases
The TopDown Engine is the best Unity 2D+2.5D Platformer kit. Get it and create your own 2D game!

Demoについて

Damage Typeの動きを知るためのDemoが準備されています。

TopDownEngine->Demos->Koala2D->KoalaHealth

以下の場所にDamage Typeのデモが準備されているため開いてみましょう。

KoalaHealthの場所

開いてみるとたくさんの大砲とそれと対になっているスイッチがあります。スイッチを有効にする(スイッチ上でスペースを押す)と大砲から弾が発射されダメージを受けると大砲それぞれに設定されたDamage Typeがキャラクタに反映される作りになっています。

炎ダメージを受けた時

Damage Typeの設定

Damage Typeを設定するためにはダメージを発生させる必要があるので必ず「Damage On Touch」を設定する必要があります。今回は以下のFireCannonのオブジェクトからどのようにDamage Typeが設定されているのか見てきましょう。

遠距離武器を設定するときはProjectileWeapon

大砲の作りを見ると分かりますが、大砲の攻撃方法としては「弾薬を使った遠距離攻撃」に該当します。そのため、弾薬を設定するためにはProjectileWeaponスクリプトから弾薬を設定する必要があります。FireCannonでProjectileWeaponスクリプトを設定しているもは以下の「KoalaCannonWeapon」になっており、スクリプトを見てみるとMMSimpleObjectPoolerから「Game Object To Pool」で「KoalaCannonBallFire」という弾薬を設定していることが分かります。Damage On Touchを設定しているのは「KoalaCannonBallFire」なのでさらにKoalaCannonBallFireを見ていきましょう。

KoalaCannonWeaponの作り

遠距離武器を設定するときになぜProjectileWeaponスクリプトを使用するのかは以下の遠距離武器の使い方に記載してあるため、興味がある方はご覧ください。

KoalaCannonBallFireの作り

KoalaCannonBallFireの作りを見てみるとDamageOnTouchが設定されています。その中の「Typed Damages」が今回紹介するDamage Typeになります。

KoalaCannonBallFireのDamageOnTouch

Typed Damagesの設定内容について簡単に説明していきたいと思います。

Associated Damage Type

どのようなDamage Typeを設定するのかをここで設定します。上記の例ではFireがありますが、デフォルトではIceやPoisonなどがあります。

Min/Max Damage Caused

通常のダメージに加算してダメージを追加することができます。

Force Character Condition

ここをTrueにすることでキャラクタの状態を設定することができます。例えば、攻撃を受けた場合にキャラクタを停止することなどできます。

Apply Movement Multiplier

攻撃を受けた場合、移動速度の倍率を変更することができます。例えば、攻撃を受けたら移動速度が低下し動きずらい状態にすることも可能です。

以上がDamage Typeの設定になりますが、ここで設定するDamage Typeは「Damage Typeが設定された場合、どのような状態にキャラクタを設定するのか?」ということになります。そのため、最初に見せたダメージを受けた時の炎のエフェクトなどはここではなくキャラクタで設定する必要があります

キャラクタ側の設定

DemoにあるKoala_HealthDemoを見てみましょう。その中でDamage Typeの設定が必要になるのは2か所あります。

Shared Health and Damage Resistance

1か所目はHealthの中にある「Shared Health and Damage Resistance」です。ここのTarget Damage Resistance Processorに後ほど説明するDamageResistanceProcessorを設定します。

DamageResistanceProcessor

2か所目はDamageResistanceProcessorオブジェクトをキャラクタに設定する必要があります。

Koala_HealthDemoDamageResistanceProcessorオブジェクトを見てみると分かりますが「Fire」、「Ice」、「Poison」などのDamage Typeに対応したオブジェクトが設定されています。それぞれのオブジェクトがどのように呼ばれるのか判断しているのは「Damage ResistanceのType Resistanceと一致するかどうか」になります。

なので、例えばIceResistanceのType Resistanceが初期はIceになっていますが、これをFireに変更することで、FireのDamage Typeを設定している攻撃を受けるとIceResistanceの効果が実行されるようになります。

以下の動画を見ると、Fireのエフェクトだけでなく、Iceのエフェクトも発生していることが分かります。これはIceのエフェクトが発動する条件がFireの攻撃でも発生するという条件になっているからです。

Damage Typeを設定するには?

改めて、Damage Typeを設定するには?ということを簡単に書きますと

  1. DamageOnTouchで設定するダメージの種類に発生するDamage Typeを設定する
  2. ダメージを受けるキャラクタのHealthとキャラクタオブジェクトに発生させたDamage Typeを設定したDamageResistanceProcessorを設定する

上記2点を行うことでDamage Typeを発生させることができます。エフェクトなどの設定はDamageを発生させる側(弾薬)ではなくDamageを受ける側(キャラクタ)で設定する必要があることに注意が必要です。

まとめ

今回はDamage Type(状態異常)のやり方について紹介しました。

今回紹介した内容はデフォルトのFireやIceがどのように発動しているのかに重点を置いています。もちろん、デフォルトで設定されているもの以外にもオリジナルのDamage Typeを作ることも可能です。次回はオリジナルのDamage Typeをどのように作るのか?について紹介したいと思います。

コメント

タイトルとURLをコピーしました