1. function Play (mode : PlayMode = PlayMode.StopSameLayer) : bool
  2. function Play (animation : string, mode : PlayMode = PlayMode.StopSameLayer) : bool
Play()将开始播放名称为animation的动画,或者播放默认动画。动画会突然开始播放而没有任何混合。如果模式是PlayMode.StopSameLayer,那么所有在同一个层的动画将停止播放。如果模式是PlayMode.StopAll,那么所有当前在播放的动画将停止播放。

如果动画已经在播放过程中,别的动画将停止但是动画不会回退到开始位置。
如果动画没有被设置成循环模式,它将停止并且回退到开始位置
如果动画不能被播放(没有动画剪辑或者没有默认动画),Play()将返回false。

  1. // 播放默认动画。
  2. animation.Play();// Plays the walk animation - stops all other animations in the same layer
  3. // 播放walk动画 - 停止同一层的其他动画。
  4. animation.Play("walk");
  5. // Plays the walk animation - stops all other animations
  6. // 播放walk动画 - 停止其他动画。
  7. animation.Play("walk", PlayMode.StopAll);
Animation.CrossFade淡入淡出
function CrossFade (animation : string, fadeLength : float = 0.3F, mode : PlayMode = PlayMode.StopSameLayer) : void

在一定时间内淡入名称为name的动画并且淡出其他动画。如果模式是PlayMode.StopSameLayer,在同一层的动画将在动画淡入的时候淡出。如果模式是PlayMode.StopAll,所有动画将在淡入的时候淡出。如果动画没有被设置成循环,它将停止并且在播放完成之后倒带至开始。

  1. // Fade the walk cycle in and fade all other animations in the same layer out.
  2. // 淡入walk循环并且淡出同一层的所有其他动画。
  3. // Complete the fade within 0.2 seconds.
  4. // 在0.2秒之内完成淡入淡出。
  5. animation.CrossFade("Walk", 0.2);
  6. // Makes a character contains a Run and Idle animation
  7. // fade between them when the player wants to move
  8. // 让一个角色包含Run和Idle动画,并且在玩家想移动的时候在他们之间淡入淡出。
  9. function Update () {
  10. if (Mathf.Abs(Input.GetAxis("Vertical")) > 0.1)
  11. animation.CrossFade("Run");
  12. else
  13. animation.CrossFade("Idle");
  14. }
这里列出的最常见的播放动画的两种方法,还有其他方法属性大家自觉的去查下API吧。下面我放出自己写的人物简单控制脚步,包括上下左右移动。j,k攻击。

RoleScriptContorl.cs

  1. using UnityEngine;
  2. using System.Collections;
  3.  
  4. public class PlayerControl : MonoBehaviour 
  5. {
  6.     public static PlayerControl instance;
  7.     private AnimationClip animationClip;
  8.     private CharacterController controller;
  9.     public float runSpeed = 5;
  10.     private float moveSpeed = 3;//走路速度
  11.     private string currentState="";
  12.  
  13.     private GameObject monster;
  14.      
  15.     void Awake()
  16.     {
  17.         instance = this;
  18.     }
  19.  
  20.     void Start ()
  21.     {
  22.         controller = GetComponent<CharacterController>();
  23.         print(transform.forward);
  24.     }
  25.  
  26.      
  27.     void Update ()
  28.     {
  29.         KeyboardControl();
  30.     }
  31.  
  32.     void KeyboardControl()
  33.     {
  34.          
  35.         Vector3 forward = transform.TransformDirection(Vector3.forward);//从自身坐标转换为世界坐标
  36.    
  37.          
  38.         if(Input.GetKey(KeyCode.W))
  39.         {
  40.             
  41.  
  42.             if(Input.GetKey(KeyCode.LeftShift))
  43.             {
  44.                 currentState = RoleAnimationState.RUN;//改变人物动画状态
  45.                 PlayAnimation(currentState);//播放动画
  46.                  
  47.                 controller.SimpleMove(forward * runSpeed * Time.deltaTime*100);
  48.             }
  49.             else
  50.             {
  51.                 currentState = RoleAnimationState.WALK;
  52.                 PlayAnimation(currentState);
  53.  
  54.                 controller.SimpleMove(forward * moveSpeed * Time.deltaTime * 100);
  55.             }
  56.         }
  57.          
  58.         if (Input.GetKey(KeyCode.S))
  59.         {
  60.             Vector3 back = transform.TransformDirection(Vector3.back);
  61.             currentState = RoleAnimationState.WALK;
  62.             PlayAnimation(currentState);
  63.             controller.SimpleMove(back * moveSpeed * Time.deltaTime * 100);
  64.         }
  65.         if (Input.GetKey(KeyCode.A))
  66.         {
  67.             Vector3 up = transform.TransformDirection(Vector3.up);
  68.             transform.Rotate(Vector3.up * -50 * Time.deltaTime);
  69.         }
  70.         if (Input.GetKey(KeyCode.D))
  71.         {
  72.             Vector3 up = transform.TransformDirection(Vector3.up);
  73.             transform.Rotate(Vector3.up * 50 * Time.deltaTime);
  74.         }
  75.         if (Input.GetKey(KeyCode.J))
  76.         {
  77.             currentState = RoleAnimationState.ATTACK;
  78.             PlayAnimation(RoleAnimationState.ATTACK);
  79.         }
  80.         if (Input.GetKey(KeyCode.K))
  81.         {
  82.             currentState = RoleAnimationState.ATTACK01;
  83.             PlayAnimation(RoleAnimationState.ATTACK01);
  84.         }
  85.          
  86.              
  87.  
  88.         if(currentState!=RoleAnimationState.IDLE && !animation.IsPlaying(currentState))
  89.         {
  90.             PlayAnimation(RoleAnimationState.IDLE);
  91.         }
  92.  
  93.          
  94.     }
  95.  
  96.     void PlayAnimation(string name)
  97.     {
  98.         currentState = name;
  99.         animationClip = animation[name].clip;
  100.         gameObject.animation.CrossFade(animationClip.name);
  101.  
  102.     }
  103.    
  104.      
  105. }
下面是动画状态的一个脚本类

  1. using UnityEngine;
  2. using System.Collections;
  3.  
  4. public class RoleAnimationState : MonoBehaviour 
  5. {
  6.     public const string IDLE="Idle";
  7.     public const string WALK = "Walk";
  8.     public const string RUN = "Run";
  9.     public const string ATTACK = "Attack";
  10.     public const string ATTACK01 = "Attack01";
  11.          
  12. }
人物模型写真和inspector的组件内容(上面的代码直接挂在模型上就可以用的了。)