この記事でのバージョン
Unity 5.3.4f1 Personal
はじめに
今回は表題の通り、
AnimationCurveをInspectorで設定し、スクリプトから使う方法のご紹介です!
AnimationCurve
まず、AnimationCurveをInspectorから設定する方法ですが、
他のクラスと同様に、pubulicまたはSerializeFieldを付けたprivateで宣言するだけです。
[SerializeField]
private AnimationCurve _fadeCurvel;
public AnimationCurve FadeCurve;
次にInspectorで設定した値をスクリプトから取得する方法ですが、
以下のように、Evaluateというメソッドを使います。
//rateはfloat、0~1(左端から右端)の値を指定する float value = _fadeCurve.Evaluate(rate);
使用例
せっかくなので、AnimationCurveをどのように使用するかという例をご紹介!
例えば画像を点滅させたい時、単純に不透明度を1~0で増減させると以下のような感じに、
これだと画像が完全に表示されるのが一瞬です。
そこで、以下のようなコードで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になってる時間を長く設定すると……。
いい感じに!
おわりに
NGUIのTween系が今回紹介したような使い方が出来て便利なのですが、
uGUIではTweenAlphaとか使えないんですよね……。