查看: 1008|回复: 0
打印 上一主题 下一主题

[其他] Animation 播放动画的一些操作

[复制链接]

9903

主题

126

听众

7万

积分

首席设计师

Rank: 8Rank: 8

纳金币
53488
精华
316

最佳新人 热心会员 灌水之王 活跃会员 突出贡献 荣誉管理 论坛元老

跳转到指定楼层
楼主
发表于 2015-12-25 07:13:21 |只看该作者 |倒序浏览
  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. }
复制代码
分享到: QQ好友和群QQ好友和群 腾讯微博腾讯微博 腾讯朋友腾讯朋友 微信微信
转播转播0 分享淘帖0 收藏收藏0 支持支持0 反对反对0
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

手机版|纳金网 ( 闽ICP备2021016425号-2/3

GMT+8, 2024-11-10 13:32 , Processed in 0.088162 second(s), 29 queries .

Powered by Discuz!-创意设计 X2.5

© 2008-2019 Narkii Inc.

回顶部