technostallion

Unity、プログラム、グラフィック関係の技術ネタを書き殴ります

【Unity】カメラやゲームオブジェクトを揺らすユーティリティ

f:id:helementsof:20150425021111j:plain
Friendship is Epic用に書いた、Unityでカメラを揺らすためのコードをアップしてみる。

Unityパッケージとデモ

Unityパッケージ

こちらからダウンロード
ご利用は自己責任でお願いいたします。
作者は上記パッケージを使用することによって生じた如何なる損害に対しても責任を負いません。

デモ

要Unity Web Player
こちら

スペースキーで画面が揺れます。
以下のパラメータをスライダで調整することで揺れ方を調整可能です。

Wiggle Duration:総振動時間
Wiggle Count:総振動回数
Wiggle Range(XYZ):揺れ幅

使い方

パッケージのScripts/Wiggler.csがゲームオブジェクトを揺らすためのユーティリティクラスです。
使い方は至ってシンプル。
カメラコンポーネントがアタッチされたゲームオブジェクトに組み込む例は以下の通り

using UnityEngine;
using System.Collections;
using Fie.Utility;

/// <summary>
/// カメラ揺らしテスト用の仮カメラ
/// </summary>
public class FooCamera : MonoBehaviour
{
    private Wiggler wiggler;
    
    /// <summary>
    /// アクティブ化
    /// </summary>
    void Start ()
    {
        wiggler = new Wiggler(this.transform);
    }
    
    /// <summary>
    /// 通常更新後の毎フレーム更新
    /// </summary>
    void LateUpdate ()
    {
        // カメラの座標更新処理を書く場所

        // スペースキーでウィグラーを初期化するようにしてみる
        if(Input.GetKeyDown(KeyCode.Space))
        {
            // 0.5秒間に渡って10回の振動回数で揺らす。揺れ幅は全方向に対して1m
            wiggler.Initialize(0.5f, 10, Vector3.one);
        }

        // ウィグラーの更新
        wiggler.UpdateWiggler(Time.deltaTime);
    }
}

コンストラクタに揺らしたいオブジェクトのTransformを渡し、揺らしたいタイミングでWiggler.Initializeメソッドを呼んで下さい。
また、LateUpdate等の毎フレーム更新処理内でWigglerUpdateを呼んで下さい。

アルゴリズムの詳細は後日。