Unity官方Animator经典学习范例MecanimGDC2013学习笔记

本文是Unity官方Animator学习笔记,详细介绍了Mecanim系统,包括MatchTarget、SetFloat函数、Animator相关API、OnAnimatorMove、IK、分层、混合树、复写与重定向、录制等功能的使用,以及相关资源和教程链接,帮助开发者深入理解并应用Mecanim。
摘要由CSDN通过智能技术生成

一.准备
想做动作表现的游戏,就需要多了解Mecanim。Mecanim最近一直没有跟新,只是后来加了个额外的Playable。因此看这个示例并不过时,应该能比较全面的了解。
(1)把官方关于Mecanim的文档先大概看一遍
https://docs.unity.cn/cn/current/Manual/AnimationOverview.html
(2)去b站看下这个教学视频对Mecanim有个初步的了解
https://www.bilibili.com/video/BV1Mx411d7CY?p=11&spm_id_from=pageDriverhttps://www.bilibili.com/video/BV1Mx411d7CY?p=11&spm_id_from=pageDriver
(3)去AssetStore下载MecanimGDC2013

二 Animator相关

1.Animator.MatchTarget
在Action.cs中处理在地上滑动(slider)和跳过障碍(vault)时用到。这个函数主要是解决在某些动画在执行时候会穿模的问题。相当于提供Unity提供这样一个函数来让程序根据情况来自己调整

public void MatchTarget (Vector3 matchPosition, Quaternion matchRotation, AvatarTarget targetBodyPart, MatchTargetWeightMask weightMask, float startNormalizedTime, float targetNormalizedTime= 1);


第一,二个参数值要匹配的位置和旋转,第三个参数可以指定部位,第四个参数名的是XXWeightMask,如名,又是mask又是weight,分别是针对位置的x,y,z和旋转,实际上是4个权重。
最后两个参数,他是可以指定到动画中某一段时间的,这个需要自己预先和美术的同学沟通好。
推荐几篇文章给大家
http://www.manongjc.com/article/112632.html
https://www.cnblogs.com/chongxin/p/4104441.html
https://blog.csdn.net/qq_27361571/article/details/53307366

2.Animator.SetFloat(int id, float value, float dampTime, float deltaTime)
这是一系列函数,修改事先定义好的参数,我只是拿这个函数举例。大家见的比较多的是
整形参数 = Animator.StringToHash("参数名称");
然后Animator.SetFloat(int id, float value)这类参数。就是三个参数的SetXX,那后面两个参数是什么呢?
官方文档上对后面两个参数的解释
 

dampTime 阻尼器总时间。
deltaTime 给予阻尼器的增量时间。

看来是这个参数设置也可以有一个过程。
示例中Locomotion.cs是这么用的

        m_Animator.SetFloat(m_SpeedId, speed, speedDampTime, Time.deltaTime);
        m_Animator.SetFloat(m_AgularSpeedId, angularSpeed, angularSpeedDampTime, Time.deltaTime);
        m_Animator.SetFloat(m_DirectionId, direction, directionDampTime, Time.deltaTime);

但是Animator.SetBool是没有后面两个参数的版本的。为什么? 因为所谓有个过程,其实是做插值,并不是一下就设置成目标值。那bool的插值是什么?bool应该是没有插值。


3.通过Locomotion.cs了解几个API

        AnimatorStateInfo state = m_Animator.GetCurrentAnimatorStateInfo(0);

        bool inTransition = m_Animator.IsInTransition(0);
        bool inIdle = state.IsName("Locomotion.Idle");
        bool inTurn = state.IsName("Locomotion.TurnOnSpot");
        bool inRun = state.IsName("Locomotion.Run");

Animator.GetCurrentAnimatorStateInfo(0);获取指定层的动画信息,这个0就是第一层
Animator.IsInTransition(0) 是

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值