簡単で派手なエフェクトの作り方

Unity Advent Calendar 2016

前回は荻野さんによる超個人的・Unity初心者におススメするアセット一覧という記事でした。
この記事は金の弾丸には弱い記事となっていますのでしっかり蓄えている人は素直に前回の記事を読みましょう。

こちらはUnity Advent Calendar 2016の12月2日の記事です。

概要

こんなエフェクトが作れます。

エフェクトは難しい

Unityで派手なエフェクトを出そうと思うと、細かいパラメータチューニングが必要なパーティクルエミッタや有料のアセットを使う必要がでてきます。
私がUnityに求めているのはペタペタコンポーネントを貼ったら後はスクリプトを書くだけ!というお手軽さです。
なので、今回は無料でパラメータチューニングが必要ない派手なエフェクトを実装していきましょう。

レンズフレア

まず眩しい表現にも使われるレンズフレアを導入します。
デフォルトアセットでは見栄えがしないのでUnity Technologiesが提供しているLens Flaresをアセットストアからインポートします。

フレアが見やすいようにMain CameraのClear FlagsをSolid ColorにしてBackgroundを黒にします。
そしてCreateEmptyで作成したオブジェクトにLightを加えます。今回の用途だとリアルタイムなライティングは必要ないので、BakingはBakedにします。そしてFlareに好きな物を設定します。

これだけでも恰好良いですがパーティクルと一緒で数が増えると更に派手になります。
ただ、パーティクルと違ってレンズフレアは軽い処理ではないのでパフォーマンスが気になるのなら数は控えめにしましょう。
しかし、少量でも画面全体に与える影響は強いです。

残像

やはり格好良いエフェクトといえば残像でしょう。
さすがUnityデフォルトでそんなエフェクトを付けるコンポーネントがあります。 TrailRendererです。
マテリアルを適当に作って張り付け、End Widthを0にするだけで結構それっぽくなります。

余力があるのならマテリアルの色を変えたり、TrailRendererのColorsを変えるともっと良くなると思います。

動き

動きもパラメータ調整では大事な部分なのですが、乱数で誤魔化しています。
ここも調整次第では良い感じになるのかもしれません。

public class Move : MonoBehaviour {

    int lifeTime = 60;

    void Update () {
        float speed = 1f;
        float radius = Random.Range(0, 2 * Mathf.PI);
        transform.position += new Vector3(
            speed * Mathf.Cos(radius),
            speed * Mathf.Sin(radius));

        if (lifeTime > 0) {
            lifeTime--;
        }
        else {
            Destroy(gameObject);
        }
    }
}

注意点

TrailRendererはそのままでは2D表示の奥側に表示されてしまいます。
2D表示より手前に描画するには描画順を遅らせる必要があります。

void Start () {  
    var trailRenderer = GetComponent<TrailRenderer>();
    trailRenderer.sortingOrder = 2;
}

終わりに

パーティクル全般が複雑な上に良いエフェクトを作ることが難しいと感じたので、雑な方法ながら簡単に派手なエフェクトを表示する方法を紹介してみました。

このエフェクトを使った冒頭のアプリTrillをGoogle Play ストア‎で公開しているので良かったらプレイしてみてください。

次はsrndptyさんによるuGUIのScrollViewを使いこなすための7つのTipsという記事です。
uGUIのレイアウトには苦い思いをさせられる事が多いので少しでも幸せになる人が増えると良いですね!