クリックゲームの作り方

#11. Unityでダメージエフェクトをスクリプトから出す方法

Unityでスクリプトからエフェクトを出す

前回、Unity のエフェクトである ParticleSystem について説明しました。

そこでは、エフェクトのPrefabを Instantiate するだけで出るという風に書きました。
今回は、具体的に Prefab の Load の実装方法。
そして、Load した Prefab のInstantiate についてスクリプトの書き方について解説します。

Prefabリソースの読み込み方法

まずは、Prefab のリソースの読み込みです。

以前の記事では、Prefab をロードするには Resource.Load を使いました。
について説明します。

Hierarchy においてある GameManager にアタッチしているスクリプト・・・
こちらに、Prefab読み込み用のSerializeField を作ります。Prefab読み込み用のSerializeField

ダメージエフェクトには、
Assets/JMO Assets/Cartoon FX/CFX Prefabs/Hits/CFX_Hit_C White.prefab

死亡エフェクトには、
Assets/JMO Assets/Cartoon FX/CFX2 Prefabs/Skull & Ghosts Effects/CFX2_EnemyDeathSkull.prefab

をD&Dします。

SerializeFieldにDrag&Drop

こうするだけで、GameManager のフィールドに自動的に Load されます。

こうすることで、GameManagerに暗黙的に含まれるアセットになり、Resource に置く必要がなくなるメリットがあります。
しかし、フィールド変数名を変えると、Prefab の選択が外れてしまうので注意

読み込んだエフェクトPrefabをInstantiate

ダメージエフェクトは即座に

まずは、ダメージエフェクトを Instantiate します。
こちらは、クリック時がいいでしょう。

ゲームの手応えを出すためには、なるべく早くプレイヤーの操作に応えてあげるのがいいです

スクリプトは以下の通り。
effect-prefab-instantiate-damage

Prefab のエフェクトそのまま出すと、かなり小さかったので、生成と同時に10倍にしました。
(Instantiate後にスケール入れても間に合うんですね)

以下のような絵にしてみました。
ダメージエフェクト

死亡エフェクトはタイミングが大事

続いて、死亡エフェクトです。
こちらは、HPが0になったタイミングではなく、バタって倒れた後のいい感じのところで出すのが肝要です。

以前解説した GameManager.Update にステートを一つ増やして以下のように書きました。
effect-prefab-instantiate-dead

こちらも、サイズを調整して以下のような絵にしてみました。
effect-prefab-dead

Instantiateしたエフェクトの破棄は?

Instantiate したオブジェクトは、Destroy する必要があるかと思いますが、
このエフェクトについては、表示が消えた後に自動的に Destroy されるので
明示的に破棄する必要はありません。

created by Rinker
¥4,389
(2021/10/18 16:21:00時点 Amazon調べ-詳細)

終わりに

いかがでしたでしょうか。
今回は、UnityのエフェクトPrefabをSerializeFieldにLoadする方法
そして、それを出すために Instantiate する方法
最後に、サイズ調整やタイミングについて解説しました。

次回は、このサイズ調整がコードに直接書かれていて、値を変えるためにコンパイルする必要があるところを改善します。
つづく。