http://liweizhaolili.blog.163.com/blog/static/16230744201301675240114/
导入模型
Rig选项卡中Animation选项卡 AnimationType 选择 Humanoid
为模型创建AnimatorControler
Animator Controler 中可以通过拖拽动画到Animator面板 增加新的动画
右键每个动画可以选择动画之间的转换(Make Transition)
添加完两个动画的转换会出现一个箭头
默认是根据时间(Exit Time)来转换的
在Animator窗口的左下角 有个Parameter 点击"+"可以创建自己定义的转换条件 有4种类型Float Int Bool 和 Trigger
这里 以 Int 类型为例
例如添加一个"MotionState" 的Int类型变量作为转换的条件
此时点击Animator窗口中任意两个动作之间的箭头
在Inspector面板中可以看到Conditions 这里就是两个动作转换的条件 点击发现我们创建的 "MotionState"出现了
选择它 后面 可以选择是 大于(Greater) 等于(Equals) 小于(Less) 不等于(NotEqual) 默认是等于(Equals)
最后是相比较的值
通常会在脚本中定义一个和当前动作状态一直的枚举文件
例如:
所有转换为Idle的条件都为1
所有装换为Run的条件都为2
关键代码
using UnityEngine; using System.Collections; public class MoveStateControler : MonoBehaviour { private Animator animator; public string MOTIONSTATE = "MotionState"; // Use this for initialization void Start () { //获取Animator组件 animator = this.GetComponent<Animator>(); } // Update is called once per frame void Update () { } void OnGUI() { if (GUI.Button(new Rect(10,10,100,50),"Run")) { //改变当前动作状态 MotionState改为 2 if (animator != null) { animator.SetInteger(MOTIONSTATE, 2); } } if (GUI.Button(new Rect(10, 60, 100, 50), "Idle")) { //改变当前动作状态 MotionState改为 1 if (animator != null) { animator.SetInteger(MOTIONSTATE, 1); } } } }