using UnityEngine;using System.Collections;public class AnimationCurveTutor : MonoBehaviour {public AnimationCurve anim;public void Update(){transform.position = new Vector3(Time.time, anim.Evaluate(Time.time), 0);}} 运行后,物体会按曲线轨迹向右移动。
第三部分:脚本创建AnimationCurve AnimationCurve可以理解为2部分。(1)键序列(2)左右循环模式(又作左右包裹模式)
一:键序列
创建键序列:Keyframe[] ks = new Keyframe[3];
曲线中加入键序列:AnimationCurve curve = new AnimationCurve(ks);
获取曲线中的键序列:curve[index] 或者 curve.keys[index]
添加单键:curve.Addkey(time,value)
删除单键:curve.RemoveKey(index) 二:左右循环 anim.preWrapMode = WrapMode.Loop;anim.postWrapMode = WrapMode.Once;
三:键
Keyframe kf = new Keyframe(time,value);
kf.inTangent = 45;
kf.outTangent = 45;
用脚本动态实时创建AnimationCurve。创建如下脚本,拖到任意物体运行即可。 using UnityEngine;using System.Collections;public class CreateRuntime : MonoBehaviour { public AnimationCurve anim = new AnimationCurve(); void Start() { Keyframe[] ks = new Keyframe[3]; ks[0] = new Keyframe(0, 0); ks[0].inTangent = 0; ks[1] = new Keyframe(4, 0); ks[1].inTangent = 45; ks[2] = new Keyframe(8, 0); ks[2].inTangent = 90; anim = new AnimationCurve(ks); } void Update() { transform.position = new Vector3(Time.time, anim.Evaluate(Time.time), 0); }} 第四部分:编辑器的AnimationCurve 创建EditorCurves.cs及FollowAnimationCurveMine .cs脚本如下。 使用时,先选中物体,再点击Unity菜单栏Examples->Mine,编辑好曲线后点击Generate Curve,之后运行即可。using UnityEngine;using System.Collections;using UnityEditor;public class EditorCurves :EditorWindow {AnimationCurve curveX = AnimationCurve.Linear(0,0,10,10);[MenuItem("Examples/Mine")]static void Init(){EditorWindow window = GetWindow(typeof(EditorCurves));window.position = new Rect(0,300,200,100); window.Show();}void OnGUI(){ curveX = EditorGUI.CurveField(new Rect(3,3,position.width-6,15), "Animation on X", curveX);if(GUI.Button(new Rect(3,60,position.width-6,30),"Generate Curve")) AddCurveToSelectedGameObject();}void AddCurveToSelectedGameObject(){if(Selection.activeGameObject) { FollowAnimationCurveMine comp = Selection.activeGameObject.AddComponent<FollowAnimationCurveMine>(); comp.SetCurves(curveX); } else { Debug.LogError("No Game Object selected for adding an animation curve"); }}}
using UnityEngine;using System.Collections;public class FollowAnimationCurveMine : MonoBehaviour {public AnimationCurve curveX;public void SetCurves(AnimationCurve tmpCurve){curveX = tmpCurve;}void Update () {if(curveX != null) transform.position = new Vector3(1f*Time.time, curveX.Evaluate(Time.time) * 0.3f,0);}}