animator.MatchTarget()这个方法就是让动画与目标点进行匹配,最终实现一些攀爬,跳跃一类的动作,现在用的地方不是太多,但是前段时间自己用到的时候,实际表现和自己预想的差的特别远,后来经过查各种资料,最后自己总结出自己的一些看法。
animator.MatchTarget(Vector3 matchPosition,Quaternion matchRotation,
AvatarTarget targetBodyPart,MatchTargetWeightMask weightMask,
float startNormalizedTime, float targetNormalizedTime = 1))
这个是官方给出的参数,这个方法有重载,最后一个参数可以不填默认为1,下边我解释下这5个参数的意义
- vector3 matchPosition 匹配的目标点坐标
- vector3 matchPosition 匹配的目标点旋转角度的四元数
- AvatarTarget targetBodyPart Avatar系统中与目标点匹配的部分(身体的哪个位置与最终位置匹配)
- MatchTargetWeightMask weightMask
目标点的position和rotation所占的权重,第一个是目标点位置所占的权重,第二个是目标点旋转所占的权重
- float startNormalizedTime (0~1)动画在该百分比处开始匹配最终位置
- float targetNormalizedTime = 1(0~1) 动画在该百分比处到达最终位置
上边介绍玩每个参数,需要注意最终位置和目标位置的区别,最终位置是目标位置和起始位置通过权重进行平均得到的一个位置,目标位置参数已经给出,起始位置就是这个动画中AvatarTarget targetBodyPart Avatar的部位原本应该到达的位置(就是不用这个方法他应该到达的位置)。
举个例子
ani.MatchTarget(tra.position,tra.rotation, AvatarTarget.RightHand,
new MatchTargetWeightMask(new Vector3(1f, 1f, 1f), 0f), 0.31f,0.41f);
其中tra是我定义的一个transform,就是目标点的位置,这个函数的意思就是在播放到31%时候,我的右手(AvatarTarget.RightHand)开始匹配最终位置(最终位置就是目标点的坐标加上动画自身的旋转角度,这个是根据( new MatchTargetWeightMask(new Vector3(1f, 1f, 1f), 0f))权重去判断的,目标position权重全部是1,表示X,Y,Z的权重都是1,大家可以试一下调一下这个参数,测试一下,而rotation权重为0,说明目标点的旋转角度在最终位置没有一点权重,就是不对目标位置有一丝影响 ,一般里边传的参数就是这两个固定值,假如有什么特殊要求的话,大家可以去慢慢测试微调 ),在动画播放到41%的时候动画的右手坐标到达最终位置。最后的两个float的参数大家可以看下下边的图
Paste_Image.png Paste_Image.png
接着大家看看我做的这个整体效果图,那个球就是最后我要到达的地点就是我上边的tra
整个跳跃动作.gif 若水GIF截图_2016年12月7日22点27分18秒.gif其中参数里边那个权重我也是研究了好久,但是还是不能完美的控制最终位置的准确点位(除了起始位置和目标位置),大家有兴趣可以去研究下这个权重,互相交流下。
网友评论