ゲームにおいてチャージが完了していたり魔法の詠唱中だったりするときには、
キャラからパワーが溢れているようなエフェクトを付けたいですよね。
そういったエフェクトをEffekseerを使ってサクッと作りたいと思います。
今回はUnityへの組み込みまで行います。
エフェクトを作る
こういう良い感じのエフェクトを作ります。
衝撃波
ノードタイプはリングです。
立体的な輪が広がって消えていく感じです。
パーティクル
ノードタイプはスプライトです。
周囲にランダムに散らしてゆっくり上に上がりつつ消えていく感じです。
ノードの生成数を無限に設定
こういう纏う系エフェクトは無限に続いて、必要になったら消えるようにして欲しいです。
↓のスクショのように、生成数のところの無限にチェックを入れて一定時間で終わらないようにしましょう。
ゲームに組み込む
今回はUnityを使用します。
SDユニティちゃんを借りてきました。
SDユニティちゃんに子GameObjectを付けて、コンポーネントとしてEffekseerEmitterを追加します。
今回On/Offをコントロールしたかったので、Play On StartはOffにして、代わりにEffectControl.csを追加しました。
また、こういう無限に続くタイプは手動で停止させる必要があります。
その際Stop()を使うと瞬時に全部消えてしまい不自然です。
そういうときはStopRoot()を使いましょう。
ルートノードのみを停止させることで、子ノードの生成が止まり寿命で少しずつ消えていく演出が実現できます。
public class EffectControl : MonoBehaviour
{
private void OnGUI()
{
var emitter = GetComponent<EffekseerEmitter>();
if (GUILayout.Button("Start Effect")) {
emitter.Play();
}
if (GUILayout.Button("Stop")) {
emitter.Stop(); // 瞬時に消える
}
if (GUILayout.Button("Stop Root")) {
emitter.StopRoot(); // 少しずつ消える
}
}
}
実行した結果
1回目がStop()で止めたとき、2回目がStopRoot()で止めたときです。
2回目の方が自然にエフェクトが消えていきますね。
エフェクトを止めるときに呼ぶStop()とStopRoot()の違い。Stop()は即時全ノード停止。StopRoot()はルートノードのみを停止→子ノードの生成が止まってフェードアウトになる #Effekseer pic.twitter.com/zG6HARgmMH
— うえした (@ueshita) 2017年8月20日