【Unity】Avatar与AvatarMask系统介绍(TPS.番外篇)


这次也是拖了蛮久,一个是在修动画,一个是别的游戏确实比较能吸引住人。
在主要系列进行前,要先为接下来要讲的动画做一些基础知识的补充,这期是Avatar,即替身系统,以及AvatarMask的讲解。

一些动画知识

对于动画,我的了解比较基础,大家可以去看这位的系列《动画入门》
在这里,我就提一些我遇到的以及需要注意的地方。

动画文件格式

对于外部导入的动画文件,相信最多的就是从Mixamo上下载的动画文件了。还有一些其他的,比如在资源商店里购买的那些。
一般来说,导入到unity后,会是这样的界面,我们需要关注的就是Rig。
在这里插入图片描述
通常而言,Mixamo的动画都是Generic类型,而我们会将其更改为Humanoid类型。这些操作代表的是什么?

这就要聊到动画文件本身了。我们思考一个问题,我们如何描述动作?
对于这些动画文件来说,描述方式是骨骼的位置及旋转。这样很好理解,我们只需要确定一个基准骨骼(通常选择腹部的骨骼作为基准),然后逐层确定骨骼位置,这样就可以确定所有的骨骼位置了,同样,,动起来之后我们只需要描述在哪一帧时哪些骨骼发生了位移和旋转,其余节点随之重新计算位置即可1
在这里插入图片描述
那么我们明白了动画文件描述的是哪些属性,那么如何将属性与对应骨骼绑定呢?一种很直接的方式就是:骨骼叫什么,我就拿进来,然后把对应数据写在后边。没错,就这么简单。

正是这种简单的做法导致了接下来出现的问题。

Avatar系统-Unity统一骨骼的解决方案

当模型师A的动画很棒,而模型师B的角色是我要用的,那么这个动画的复用2要求是什么?动画中的骨骼命名要与角色骨骼相同(结构我不清楚,但我认为也最好一样)。如果这两位模型师规范过创建和命名规则,那么复用没有任何问题;但对于个人开发者而言,我们手中的模型和动画没有任何的命名规范,那么如何去复用这些动画呢?

Unity为我们提供了Avatar,即替身系统。这是一种Unity设置的骨骼模式,只要你是人型的角色,就会识别,并根据角色原本的骨骼及命名,创建对应的Avatar。那么只需要大家的骨骼都转换成这种模式,我们就可以实现动画复用了。

对于用户而言,我们只需要将Rig中的模式3切换为人形即可。那么这种简单的创建就会带来很多问题,就是Avatar的精准度。注意:这是常见问题

在讨论这个问题前,我们先得了解Avatar的基本形态。
创建Avatar有两种方式,可以复用其他Avatar,也可以为当前模型创建Avatar。我们一般都是让其创建。下图是创建后的Rig界面,那么Avatar怎么看呢?我们的模型中有,也可以直接点击下图中的Configure打开界面。
在这里插入图片描述
下图就是Avatar的界面了。我们看到了角色的Avatar。
可以看到右侧,unity将原本的骨骼节点对应到了Avatar。其中有些节点可以为空,而关键节点不可以为空。

在这里插入图片描述
Unity是以T字的人体来创建的,然后每个骨骼方向什么都是计算出来,或者说推算出来的,因此不一定准确。
于是乎,我们可以看到一些很奇怪的画面,比如下图中跑步的左脚是很奇怪的,原因是复用的动画的替身没有绑定很准确,导致我的角色的左脚有问题。
解决方式:如果unity的角色在动画预览下不正常,则修改动画的Avatar绑定。
如果如果unity的角色在动画预览下正常,那么就该修改角色的Avatar。
这样的修改方式是要保证动画的通用性。
在这里插入图片描述
老实说,这个动画中只有上半身还比较好,下本身只能说一言难尽,那我能不能只用上半身的动画而不用下半身的动画呢?
替身系统为我们提供了解决方案。

AvatarMask-部分动画的应用

很多时候,我们希望只改变角色的部分动画。
比如说,换子弹。当我按照一般思路来处理动画,那么考虑到静止,走路,跑步等状态,我们要做特别多的动画,而且动画之间的过渡问题实在是让人难堪。
考虑到是跑步或者什么状态都是下半身的运动,我们的手就没有动嘛(非空手状态下手部不考虑大的晃动)。那换子弹也就是两条胳膊的事情,跟腿也不冲突。那现在我只需要让各个部分做自己的事情,,不就可以处理复杂的动画了吗?
AvatarMask就是这样子。它基于原本的替身体系。
你只需要选择在这一个动画层中,哪些骨骼需要动就可以。
在这里插入图片描述
在这里插入图片描述
可以发现,这套东西很简单,但很有用。


  1. 比如胳膊没有动,但是肩膀发生了运动,因为是父子关系,胳膊是以肩膀为坐标原点记录位置的,所以当肩膀发生了运动,胳膊在世界坐标下的位置也发生了移动,所以要重新计算 ↩︎

  2. 所谓的复用,就是指一套要将 ↩︎

  3. Generic代表是普通模型,无论是车,动物,人都可以。而随之导入的动画一般就和上文介绍的普通动画一样,复用很麻烦。
    Humanoid代表的是这个模型一定是人形模型,Unity会为其创建Avatar以统一骨骼系统。 ↩︎

猜你喜欢

转载自blog.csdn.net/weixin_52540105/article/details/128650452
今日推荐