前回、Unity のエフェクトである ParticleSystem について説明しました。
そこでは、エフェクトのPrefabを Instantiate するだけで出るという風に書きました。
今回は、具体的に Prefab の Load の実装方法。
そして、Load した Prefab のInstantiate についてスクリプトの書き方について解説します。
Prefabリソースの読み込み方法
まずは、Prefab のリソースの読み込みです。
以前の記事では、Prefab をロードするには Resource.Load を使いました。
について説明します。
Hierarchy においてある GameManager にアタッチしているスクリプト・・・
こちらに、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します。
こうするだけで、GameManager のフィールドに自動的に Load されます。
こうすることで、GameManagerに暗黙的に含まれるアセットになり、Resource に置く必要がなくなるメリットがあります。
しかし、フィールド変数名を変えると、Prefab の選択が外れてしまうので注意
読み込んだエフェクトPrefabをInstantiate
ダメージエフェクトは即座に
まずは、ダメージエフェクトを Instantiate します。
こちらは、クリック時がいいでしょう。
ゲームの手応えを出すためには、なるべく早くプレイヤーの操作に応えてあげるのがいいです。
スクリプトは以下の通り。
Prefab のエフェクトそのまま出すと、かなり小さかったので、生成と同時に10倍にしました。
(Instantiate後にスケール入れても間に合うんですね)
以下のような絵にしてみました。
死亡エフェクトはタイミングが大事
続いて、死亡エフェクトです。
こちらは、HPが0になったタイミングではなく、バタって倒れた後のいい感じのところで出すのが肝要です。
以前解説した GameManager.Update にステートを一つ増やして以下のように書きました。
こちらも、サイズを調整して以下のような絵にしてみました。
Instantiateしたエフェクトの破棄は?
Instantiate したオブジェクトは、Destroy する必要があるかと思いますが、
このエフェクトについては、表示が消えた後に自動的に Destroy されるので
明示的に破棄する必要はありません。
終わりに
いかがでしたでしょうか。
今回は、UnityのエフェクトPrefabをSerializeFieldにLoadする方法
そして、それを出すために Instantiate する方法
最後に、サイズ調整やタイミングについて解説しました。
次回は、このサイズ調整がコードに直接書かれていて、値を変えるためにコンパイルする必要があるところを改善します。
つづく。