GameTang
圣骑士
圣骑士
  • UID4314
  • 粉丝3
  • 关注2
  • 发帖数43
  • 社区居民
阅读:1000回复:1

菜鸟日记六《略解Unity Animator下》

楼主#
更多 发布于:2018-03-30 15:38

 好,我们继续接着上一篇来继续说

在上一篇文章中,我详细解说了动画之前的相互切换,接下来我们要在搭好的Animator Controller 中放入东西,如下图所示,我们选中待机动画文件,在Inspecteor 面板上右图所示,点击Animations 红色圆圈 Loop Time 表示这个动画是否需要循环播放,例如 走 跑 攻击 这些一般是要设置成循环的状态,总不能走一下就不走了吧,打一下不打了,但是 死亡动画肯定是只播放一次的,一直死就太尴尬了,改完之后最下面有个Apply按钮点一下,找不着你离开这个页面也会提示你是否Apply 是就行了,黄色图片就是我一会需要用到的几种动画,一一处理下

图片:十二.png

好,接下来如下图所示我们点击Idle  Inspector 会出现下面的所示的内容,我们找到Idle状态下要播放的动画片段,例如我的 ELSdaiji1 这个文件,点开找到下面小红色圆圈的部分 Take001 这个文件就是 ELSdaiji1 的动画片段,也就是我们需要的Idle动画 把他拖到 Inspector 面板上 红色圆圈 Motion 栏里,Speed 代表的是动画的播放速度,1 为正常,大于为加快 小于为 减慢。  同理 我们把 Run Attak Death 几个State也设置好动画片段

图片:十三.png

至此,我们就是设置好 我们的动画状态机了,老版的Animation 如果动画片段多的话就要自己写状态机了,一般如果只是一两三个动画片段的话,用Animation 也可以,直接控制播放顺序就好了。Animator Controller 设置起来麻烦,自己比较着来

接下来,就是代码控制来实现动画的播放和切换

从我们的动画文件里拉出来一个模型,一般模型文件 会有个 Tpose 文件用次来充当默认模型,没有随便拉一个也行,只要是本动画的模型就行,然后给此模型添加一个 Animator 组件,有就不用了,没有就点击 Inspector 面板的 Add Component 搜索 Animator 加上就行了。然后把我们刚才创建好的  AnimatorTest  Animator Controller  拖到模型Animator组件 Controller的栏里,Controller下面 Avatar 如果没有的话从本动画文件动画片段里拖一个放进去也行,

然后 我们在Assets ---->Scripts 文件夹 (我自己创建的)  ---->右键----->Create------>C# Script  命名为AnimatorTest 然后打开

图片:十四.png

public class AnimatroTest : MonoBehaviour {

        private Animator anim;   //声明一个Animator 属性

        // Use this for initialization

        void Start () {

                anim = transform.GetComponent<Animator> ();   //获取Animator组件

        }

        // Update is called once per frame

        void Update () {

                //执行动作之前属性进行重置

                anim.SetInteger ("death", 0);

                anim.SetInteger ("idle", 0);

                anim.SetInteger ("attak", 0);

                anim.SetInteger ("run", 0);

                if (Input.GetKeyDown(KeyCode.A)) //按下A 播放奔跑

                {                

                        anim.SetInteger ("run", 1);

                        print("执行奔跑");

                }

                if (Input.GetKeyDown(KeyCode.S))  //按下S 播放攻击

                {

                        anim.SetInteger ("attak", 1);

                        print ("执行攻击");

                }

                if (Input.GetKeyDown(KeyCode.D))//按下D 播放静止

                {

                        anim.SetInteger ("idle", 1);                

                        print ("执行静止");

                }

                if (Input.GetKeyDown(KeyCode.W)) //按下W播放死亡

                {

                        anim.SetInteger ("death", 1);

                        print ("执行死亡");

                }

        }

}

运行结果如下图

图片:十五.png

图片:十七.png

图片:十八.png

图片:十九.png

图片:十六.png

好了完美运行,完美切换,Unity Animatro 基础结束,关于动画的IK Layer我也不会,一般这就差不多了,更多的是更多的动画片段的联合使用,

设计一个更完美的动画逻辑,

个人感觉 枚举 Switch 和Animator Controller 挺适合的

打字不易,给个赞吧

转载请注明 AR 学院     上篇

最新喜欢:

归海一啸归海一啸

欢迎分享

marvr_ios
论坛版主
论坛版主
  • UID3513
  • 粉丝11
  • 关注1
  • 发帖数144
  • 社区居民
  • 忠实会员
  • 原创写手
沙发#
发布于:2018-03-30 23:35
mark,写的很好!
开发者
游客

返回顶部