纳金网

标题: Animation 播放动画的一些操作 [打印本页]

作者: 烟雨    时间: 2015-12-25 07:13
标题: Animation 播放动画的一些操作
  1. using UnityEngine;
  2. using System.Collections;
  3. using System.Collections.Generic;

  4. public class NpcAnimation : MonoBehaviour
  5. {
  6.     Animation animation;
  7.     public string playingAnim;//正在播放的动画名字
  8.     public bool nextStart =true;//是否开始播放下一个动画
  9.     public float playingAnimTimeProgress;//正在播放的动画的播放进度,=1时播放完毕(动画播放模式为WrapMode.Once才有效,不确定)
  10.     public bool isPlayAnim =true;//是否播放动画
  11.     void Awake()
  12.     {
  13.         this.animation = GetComponent<Animation> ();
  14.         SetAllAnimtionWrapMode (WrapMode.Loop);
  15.         //0.1秒后调用Update01f,然后一直间隔0.1秒后在调用
  16.         InvokeRepeating ("Update01f", 0.1f, 0.1f);
  17.     }

  18.     void Update01f()
  19.     {
  20.         if(isPlayAnim)
  21.         {
  22.             if(nextStart)
  23.             {
  24.                 playingAnim = RangeAll ();
  25.                 animation.CrossFade(playingAnim);
  26.                 nextStart =false;
  27.             }
  28.             playingAnimTimeProgress = animation [playingAnim].normalizedTime;
  29.             //如果动画播放完了,切换下一个
  30.             if(animation[playingAnim].normalizedTime>=0.97f)
  31.             {
  32.                 nextStart =true;
  33.             }
  34.         }

  35.     }

  36.     /// <summary>
  37.     /// 从全部动画里随机一个动画
  38.     /// </summary>
  39.     /// <returns>The all.</returns>
  40.     string RangeAll()
  41.     {
  42.         int cout = 0;
  43.         List<AnimationState> list = new List<AnimationState> ();
  44.         foreach (AnimationState state in animation)
  45.         {
  46.             cout++;
  47.             list.Add(state);
  48.         }
  49.         int index = Random.Range (0,cout);
  50.         return list[index].name;
  51.     }

  52.     /// <summary>
  53.     /// 设置全部动画循环状态wrap mode.
  54.     /// </summary>
  55.     /// <param name="wm">Wm.</param>
  56.     void SetAllAnimtionWrapMode(WrapMode wm)
  57.     {
  58.         foreach (AnimationState state in animation)
  59.         {
  60.             state.wrapMode = wm;
  61.         }
  62.     }


  63.     /// <summary>
  64.     ///有多少个动画
  65.     /// </summary>
  66.     /// <returns>The animation count.</returns>
  67.     int GetAnimationCount()
  68.     {
  69.         int cout = 0;
  70.         foreach (AnimationState state in animation)
  71.         {
  72.             cout++;
  73.         }
  74.         return cout;
  75.     }

  76.     /// <summary>
  77.     /// 得到正在播放的动画名字.
  78.     /// </summary>
  79.     /// <returns>如果当前没有播放动画则返回空字符串.</returns>
  80.     string GetPlayAnimation()
  81.     {
  82.         foreach (AnimationState state in animation)
  83.         {
  84.             if(animation.isPlaying)
  85.             {
  86.                 if(state.normalizedTime!=0)
  87.                 {
  88.                     return state.name;
  89.                 }
  90.             }
  91.             else
  92.             {
  93.                 return "";
  94.             }
  95.         }
  96.         return "";
  97.     }

  98. }
复制代码





欢迎光临 纳金网 (http://rs.narkii.com/club/) Powered by Discuz! X2.5