一.准备
想做动作表现的游戏,就需要多了解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) 是