unity重定向_Unity动画系统详解9:TargetMatching是什么?
洪流学堂,让你快⼈⼏步。你好,我是跟着⼤智学Unity的萌新,我叫⼩新,这⼏周⼀起来复(yu)习(xi)动画系统。
⼩新:“⼤智,我有⼀个需求,感觉可以⽤IK去实现,但是使⽤IK会有问题,我就不知道怎么办了。”
⼤智:“具体是什么需求呢?”
⼩新:“绝地求⽣⾥⾯⼈物可以双⼿撑墙跳过⼀个堵墙或者窗户,我想让⾓⾊的双⼿能恰好放到墙上,这个应该怎么做呢?”
Target Matching(⽬标点匹配)
⼤智:“这种需求其实可以使⽤Target Matching的技术。在游戏中,经常有这种情况:⾓⾊的⼿或者脚需要在特定时间放在特定的位置。⽐如⾓⾊需要⽤⼿撑着跳过⼀个⽯头或⼀堵墙,或者跳起抓住房梁。Target Match就是让动画的特定⽚段去匹配特定的位置。”
⼩新:“那具体怎么⽤呢?”
⼤智:“API是Animator.MatchTarget,你可以先去看看⽂档”
⼩新:“好嘞”
API:Animator.MatchTarget
下⾯是⼩新的笔记:
Animator.MatchTarget的⽅法原型为:
public void MatchTarget(Vector3 matchPosition,
Quaternion matchRotation,
AvatarTarget targetBodyPart,
MatchTargetWeightMask weightMask,
float startNormalizedTime,
float targetNormalizedTime = 1);
这个⽅法⽤来⾃动调节GameObject的位置和旋转。
targetBodyPart ⾝体的部位,从AvatarTarget枚举中选
matchRotation 匹配的旋转targetBodyPart
matchPosition 匹配的位置matchRotation
参数的作⽤:matchPosition
startNormalizedTime 开始匹配的时间,注意是单位化时间(动画开始位置是0,结束位weightMask 设置位置和旋转匹配的权重startNormalizedTime
择。weightMask
置是1)。如果开始时间已经超过了当前动画的播放时间,会匹配下⼀次符合的时间。⽐如:startNormalizedTime传⼊0.2,但是当前已
targetNormalizedTime 最终匹配到的单位化时间。如果值⼤于1,可以设置特定循环经播放到0.3,会匹配下⼀次循环的0.2的位置。targetNormalizedTime
数后的位置。⽐如2.3代表第2次循环的30%位置。
Unity会⾃动调整GameObject的位置和旋转来保证到特定时间时⾓⾊的特定部位能达到指定的位置和旋转。Target matching只能对Base Layer(index 0)⽣效。同⼀时间只能有⼀个match target⽣效,后续⼀个的match target需要等待前⾯的执⾏完成,再后续的match target会被忽略。
参数详解
⼩新:“⼤概知道这个⽅法是什么了,那对于跳跃这个动画,如何应⽤呢?”
⼤智:“其实只要对这⼏个参数多研究⼀下,就知道怎么⽤了。⾸先前两个参数是匹配的位置和旋转
两个参数是匹配的位置和旋转,这个不⽤多说吧?”
⽐如我要匹配墙上,那就是墙上的位置,旋转就是让⼿的⾓度贴合墙,应该可以⽤调IK的⽅式来调。”
⼩新:“嗯嗯,⽐如我要匹配墙上,那就是墙上的位置,旋转就是让⼿的⾓度贴合墙,应该可以⽤调IK的⽅式来调。
targetBodyPart的类型是⼀个枚举,可以⽤来匹配对应的位置,⽐如说匹配左⼿,那就应该传⼊左⼿。
⼤智:“没错。targetBodyPart的类型是⼀个枚举,可以⽤来匹配对应的位置,⽐如说匹配左⼿,那就应该传⼊左⼿。weightMask是⼀个结构体,可以同时设置位置和旋转的权重,这个权重的概念我们已经接触很多次了,如果为1就是完全匹配到对应的位置和旋转。”
对应的位置和旋转。
⼩新:“嗯,这⼏个参数没什么问题,就是最后两个参数有些难搞清楚”
⼤智:“最后两个参数是开始匹配和完全匹配上的时间。⽐如你想在特定的时间匹配到对应的位置,那么肯定不能到那个时间点⼀下⼦把动画拉过去,是吧?”
⼩新:“对,那样太突兀了”
⼤智:“是的,我们动画中很多的混合都是为了让动画看起来更平滑,更⾃然。所以除了这个匹配到的特定时间,也就是targetNormalizedTime,我们还需要⼀个开始匹配的时间startNormalizedTime。开始时间到了就开始去进⾏匹配混合,到targetNormalizedTime时正好精确的到达匹配的位置。”
⼩新:“那我⼤概明⽩了,我得去亲⼿实践⼀下”
⼤智:“还要注意Target Matching只能对Base Layer⽣效”
⼩新:“好我记住了”
动画重定向
unity 教程⼩新:“我突然想起来⼀个也叫什么Retargeting的东西,和这个好像啊,你顺便给我讲讲呗”
⼤智:“你说的应该是动画重定向,也就是Retargeting,⽐如将⾓⾊A的动画应⽤到没有动画的⾓⾊B上⾯,实现动画的重⽤。”
⼩新:“对对,就是这个”
要想重⽤动画不⼀定要⽤到Retargeting系统。如果两个⾓⾊的⾻骼结构⼀样,那么动画其实是可以直接重⽤的。”⼤智:“其实要想重⽤动画不⼀定要⽤到Retargeting系统。如果两个⾓⾊的⾻骼结构⼀样,那么动画其实是可以直接重⽤的。
⼩新:“哦,那为啥还要这个Retargeting系统呢?”
⼤智:“虽说两个⾓⾊的⾻骼结构⼀样,动画是可以直接重⽤。但是要求很严格,包括⾻骼的命名、⾻骼的数量、⾻骼的⽗⼦结构等等要求⼀模⼀样。这种情形⼀般只会出现在同⼀个动画师⼿⾥。如果⾻骼稍微有些差别,那就没办法直接重⽤了。”
⼩新:“确实,如果我到⼀个特别好的⼈物⾓⾊模型,但是却没办法⽤其他已有的动画,那是多么的折磨啊”
Retargeting系统只能⽤于⼈形动画。重定向相当于将不同的⼤智:“是的,这时候就需要⽤到Retargeting系统了,但是需要注意的是Retargeting系统只能⽤于⼈形动画。
⾻骼结构都映射到了Unity的Avatar上⾯。之前我们配置过AvatarMask,和那个有点像。配置的位置就是在模型导⼊设置的Rig标签⾥”
点击Configure可以进⼊配置界⾯,Unity会⾃动创建⼀个新场景⽤于Avatar的配置。
在Mapping页⾯下,可以将模型的⾻骼节点映射到Unity的Avatar上⾯对应的⾻骼节点。在Musule & Settings页⾯下可以设置每个⾻骼节点可以旋转的范围,避免出现不合常理的⾻骼旋转。
⼤智:“Retargeting系统就相当于将模型A和模型B的⾻骼都映射到了⼀个Unity Avatar上⾯,这样最终都是⽤这个同⼀个Avatar来控制动画,达到重⽤的⽬的。”
⼩新:“明⽩了,相当于⽤了⼀个中间件,将两个不同的东西匹配了起来。”
Avatar Definition除了Create From This Model这个选项之外,还有⼀个选⼤智:“没错。在设置模型的Rig的时候,需要注意的是,Avatar Definition
项是Copy From Other Avatar,如果两个模型的⾻骼结构是⼀致的,可以直接使⽤这个Copy From Other Avatar将Avatar复制过来,就不需要再重新设置⼀遍了,也能节省内存。”
总结
⼩新:“看来这两个东西⾥⾯虽然都有Target,但是其实是两个不同的东西。Target Matching⽤来匹配动画到特定的位置,Retargeting 系统是⽤来重⽤动画,让⾻骼结构不同的动画可以复⽤。”
⼤智:“说的没错”
今⽇思考题
⼤智:“给你布置个作业,去⽤Target Matching把跳跃的动画好好调⼀调”
“收到!我去也!”
“收获别忘了分享出来!也别忘了分享给你学Unity的朋友,也许能够帮到他。”
扩展阅读
Unity动画系统详解1:在Unity中如何制作动画?
Unity动画系统详解2:如何导⼊使⽤外部的动画?
Unity动画系统详解3:如何播放、切换动画?
Unity动画系统详解4:如何⽤代码控制动画?
Unity动画系统详解5:BlendTree混合树是什么?
Unity动画系统详解6:如何做好⾓⾊的移动动画?(Root Motion详解)
【建议收藏】不到免费的⾓⾊动画?来试试mixamo
洪流学堂回复 动画可以阅读本系列所有⽂章,更有视频教程等着你!
【扩展学习】
【扩展学习】在 洪流学堂
呼~ 今天⼩新絮絮叨叨的真是够够的了。没讲清楚的地⽅欢迎评论,咱们⼀起探索。
我是⼤智,你的技术探路者,下次见!
收藏哦!
点赞,收藏
别⾛!点赞
好,你可以⾛了。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论