(:3[kanのメモ帳]

個人ゲーム開発者kan.kikuchiのメモ的技術ブログ。月木更新でUnity関連がメイン。

AnimationCurveをInspectorで設定し、スクリプトから使う【Unity】


このエントリーをはてなブックマークに追加

この記事でのバージョン
Unity 5.3.4f1 Personal


はじめに

今回は表題の通り、

AnimationCurveをInspectorで設定し、スクリプトから使う方法のご紹介です!


AnimationCurve

まず、AnimationCurveをInspectorから設定する方法ですが、

他のクラスと同様に、pubulicまたはSerializeFieldを付けたprivateで宣言するだけです。

[SerializeField]
private AnimationCurve _fadeCurvel;
public AnimationCurve FadeCurve;

f:id:kan_kikuchi:20160628135604p:plain


次にInspectorで設定した値をスクリプトから取得する方法ですが、

以下のように、Evaluateというメソッドを使います。

//rateはfloat、0~1(左端から右端)の値を指定する
float value = _fadeCurve.Evaluate(rate);



使用例

せっかくなので、AnimationCurveをどのように使用するかという例をご紹介!


例えば画像を点滅させたい時、単純に不透明度を1~0で増減させると以下のような感じに、


f:id:kan_kikuchi:20160628135629g:plain


これだと画像が完全に表示されるのが一瞬です。


そこで、以下のようなコードでAnimationCurveに合わせて不透明度を変更するコード書きます。

using UnityEngine;
using UnityEngine.UI;

public class FadeImage : MonoBehaviour {

  private Image _image;

  //どのようにフェードするかのカーブ
  [SerializeField]
  private AnimationCurve _fadeCurve = null;

  //カーブのどこにいるかの割合(0~1)
  private float _curveRate = 0;    

  //フェードする速度
  private float _fadingSpeed = 0.05f;

  //=================================================================================
  //初期化
  //=================================================================================

  private void Awake(){
    _image = GetComponent<Image> ();
  }

  //=================================================================================
  //更新
  //=================================================================================

  private void Update () {
    //アニメーション
    _curveRate = Mathf.Clamp(_curveRate + _fadingSpeed, 0f, 1f);

    Color imageColor = _image.color;
    imageColor.a     = _fadeCurve.Evaluate(_curveRate);
    _image.color     = imageColor;

    //アニメーション反転
    if(_curveRate == 0 || _curveRate == 1f){
      _fadingSpeed *= -1;
    }

  }

}


AnimationCurveで不透明度が1になってる時間を長く設定すると……。


f:id:kan_kikuchi:20160628135656p:plain
f:id:kan_kikuchi:20160628135707g:plain


いい感じに!


おわりに

NGUIのTween系が今回紹介したような使い方が出来て便利なのですが、

uGUIではTweenAlphaとか使えないんですよね……。