アニメーションカーブをスクリプトで使ってみます。
シーン上のSphereオブジェクトにスクリプトを付けました。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class animationCurveTestScript : MonoBehaviour
{
[SerializeField]
AnimationCurve animationCurve; // アニメーションカーブを宣言
Vector3 startPos; // スタート時のSphereの位置
Vector3 pos; // 現在のSphereの位置
float n; // カーブの横軸の値
// Start is called before the first frame update
void Start()
{
n = 0f;
startPos = transform.position; // スタート時のSphereの位置を記録
StartCoroutine("MoveSphere");
}
// Update is called once per frame
void Update()
{
}
IEnumerator MoveSphere()
{
while (true)
{
pos = transform.position;
pos.x = n * 10 + startPos.x; // カーブの横軸の値の10倍 + スタート時のX座標 → 今のX座標
pos.y = animationCurve.Evaluate(n) * 10 + startPos.y; // カーブの縦軸の値の10倍 + スタート時のY座標 → 今のY座標
transform.position = pos;
n += 0.01f;
yield return new WaitForSeconds(0.01f);
if (n > 1) yield break;
}
}
}
[SerializeField]をつけるかpublicでAnimationCurve型の変数を宣言すると、インスペクタにアニメーションカーブがあらわれます。
これをクリックするとウィンドウが出て、アニメーションカーブを編集できます。
下部のアイコンをクリックするとプリセットが使えます。プリセットは、縦軸も横軸も0~1の値をとります。
AnimationCurve.Evaluateメソッドの引数に横軸の値を入れると、縦軸の値が返ってくるので、横軸の値をSphereのトランスフォームのX座標、縦軸の値をY座標の値に使うことで、このカーブに沿ってSphereを動かせます。
プリセットから別のカーブを選ぶと、Sphereの動きも変わります。
直線でなく、下方向にたわんだようなカーブになりますが、値の範囲は0~1のままです。
このカーブの通りに、Sphereの動きも変わります。
カーブの点はドラッグアンドドロップで動かせます。
何も無いところでダブルクリックすると、その位置までカーブを延長できます。
カーブの端の歯車アイコンから、自分で設定した点より後のカーブをどう延長するか選べます。
ループを選ぶと始点から終点までが繰り返されます。
何度もダブルクリックで延長して自由にカーブを編集できます。
カーブの端が画面から外れてしまったら、スクロールバーの端をドラッグすることで、表示を拡大縮小して戻せます。
透明度やスケールなどいろいろな値に使えます。
//void Start()
meshRenderer = GetComponent<MeshRenderer>();
//color = meshRenderer.material.color;
color = meshRenderer.material.GetColor("_BaseColor"); // マテリアルのインスペクタで設定した色を取得
StartCoroutine("MoveSphere");
//----
// IEnumerator MoveSphere()
color.a = 1 - animationCurve.Evaluate(n); // カーブの縦軸の値によって透明度を変える
meshRenderer.material.SetColor("_BaseColor", color); // 色をセットする
float s = 1 + animationCurve.Evaluate(n) * 4;
transform.localScale = new Vector3(s, s, s); // スケールを変える
縦軸の値が1だと color.a が0になって、Sphereが全く見えなくなるので、0.9くらいまでにしています。