VR、ゲーム制作、プログラミング。Unity とか Oculus Rift とか。

2013年12月8日日曜日

[Unity]NGUIでUnityの2Dスプライトをアニメーションする

NGUI で Unity 4.3 の 2D スプライトを使う方法は [Unity]NGUIでUnityの2Dスプライトを使う に書きましたが、今回はこれをアニメーションさせる方法です。

NGUI のバージョンは 3.0.6f6 以降が必要です。

まずは上記記事などを参考に、Unity 4.3 の 2D スプライト表示とアニメーション、NGUI で Unity の 2D スプライト表示ができるところまで準備してください。

あとは SpriteRenderer と Animator をアタッチして、数行のコードを追加すれば完成です。(空のオブジェクトに下のコードだけアタッチすれば、必要なスクリプトは全てアタッチされます。)

コードは以下。( GitHub : unity-ngui/UI2DSpriteAnimation.cs )

using UnityEngine;
using System;

[RequireComponent(typeof(UI2DSprite))]
[RequireComponent(typeof(SpriteRenderer))]
[RequireComponent(typeof(Animator))]
public class UI2DSpriteAnimation : MonoBehaviour
{
    System.WeakReference spriteRenderer_ = new System.WeakReference(null);
    SpriteRenderer spriteRenderer {
        get { return (spriteRenderer_.Target ?? (spriteRenderer_.Target = GetComponent<SpriteRenderer>())) as SpriteRenderer; }
    }

    System.WeakReference ui2dSprite_ = new System.WeakReference(null);
    UI2DSprite ui2dSprite {
        get { return (ui2dSprite_.Target ?? (ui2dSprite_.Target = GetComponent<UI2DSprite>())) as UI2DSprite; }
    }

    void Reset () {
        if (spriteRenderer) { spriteRenderer.enabled  = false; }
    }

    void Update () {
        if (!spriteRenderer || !ui2dSprite) { return; }

        spriteRenderer.enabled = false;
        ui2dSprite.nextSprite = spriteRenderer.sprite; // NOT ui2dSprite_.sprite2D = spriteRenderer_.sprite;
    }
}

ポイントは UI2DSprite.nextSprite を使うことです。UI2DSprite.sprite を直接書き換えると点滅します。

nextSprite は直接アニメーションで指定できないので、非表示にした SpriteRenderer 経由でコピーする必要があります。(参考 : Animation Curve を設定できる型はこちら + Unity 4.3 で Boolean とスプライト関連が追加された模様)

スクリプトを追加したら、Animator Controller をインスペクタの Animator にドラッグ&ドロップしてください。


これで動きます。

現時点では公式ドキュメントに UI2DSprite.nextSprite の説明は "To be used with animations." としか書いていませんが、ソースコードを見た範囲ではたぶん間違っていないとおもいます。


2013/12/9 追記 : UI2DSpriteAnimation.cs をアタッチすれば他の必要なスクリプトもアタッチされることを追記。

0 件のコメント:

コメントを投稿