unity新手求助,关于多个模型共享骨骼动画的问题
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了unity新手求助,关于多个模型共享骨骼动画的问题相关的知识,希望对你有一定的参考价值。
参考技术A 这个可能是模型的transform历史记录没有归零。编辑制作模型时,如果用了缩放和旋转,这些信息会被记录。要避免输出时发生拉伸等问题,编辑好的模型需要归零。3dsmax的做法是对模型添加xform修改器,这个Xform可以在修改器堆栈中的下拉菜单中找到,也可以在编辑面板中最后一栏找到。给模型添加了Xform后所有transform修改信息就重置归零了,最后再把修改器堆栈塌陷转换成Editablepoly或EditableMesh以便后续动画制作和导出。如果你是没有归零,那么可能要重新做骨骼蒙皮。一个模型做动画前一般都要严格检查所有mesh归零。关于Unity中新版动画系统的使用
Mecanim动画
1:旧版动画系统只能通过代码来控制动画播放,随着动画种类变多,代码复杂度也会增加,同时动画过渡也需要非常繁琐的代码控制,为了让有经验的动画师开发动画,unity推出了针对人物角色的Mecanim动画系统;
2:Mecanim支持运动重定向(Retargeting)功能,即把动画从一个角色模型应用到另一个角色模型;
3: Mecanim允许使用“肌肉”来控制不同骨骼的运动范围;觉得某个动画太夸张的时候,可以用"肌肉"来限制一下。
4: Mecanim动画系统三要素:
(1)Avatar: 从Mecanim系统的简化人形骨架结构(Unity抽象出来的骨架结构)到用户实际提供的骨架结构的映射(自己模型所对应的骨架结构);只要我们命名比较规范,这个映射是可以自动识别的。
(2)Animator Controller: 动画控制器用来控制动画的播放和过渡条件
(3)Animation Clip: 动画剪辑;
Mecanim动画实例
1.创建Unity工程和文件目录
2.导入资源文件包body_anim.unitypackage(第56)
3.打开Models文件夹,点击模型Boy,设置Rig---->Animation Tyoe---->Humanoid(人形动画)
4.配置Avatar
a: 导入模型后,将模型的动画模式配置成Humanoid模式。
None: 无模式, Legacy: 旧版动画模式, Generic 其他动画模式, Humanoid 人形角色动画模式;
b: 系统将会自动生成模型对应的Avatar文件, 并作为其子对象;展开模型Boy可以看到一个BoyAvatar。
c: 大部分情况下Mecanim都能正确的生成Avatar文件,
Configure这个前面会有一个勾,点击Configue,能查看到
映射情况,如果有错误,点击Configue,手动做好人形骨骼的映射。
点击Configure,Scene视图里面会呈现模型,绿色的一条一条的就是Unity抽象出来的骨架结构。右边Mapping就是映射的结果,没有绿色填充的就是美术没有设计这个骨骼。有红色的点就是没有映射成功的,可以手动拖进去。
d:Mapping: Clear清除映射, AutoMap自动映射;
e 如果骨骼绑定正确,但是角色姿势不对(不是标准的T形),
在Scene中可看到消息“Character not in T-Pose”,解决此问题
可通过Pose->Enforce T-Pose或旋转其它的骨骼。
f:Muscle配置:对于过于夸张的一些动作,比如动画重定向过来的时候,小孩的动画用在大人身上,可以通过对骨骼限定范围来进行调整,让这个骨骼运动在这个范围内,这样,就不用重新制作动画;
(1)点击Muscles & Settings栏
(2)点击要限制的骨骼;
(2)调整骨骼的运动范围的参数,旋转运动的幅度;
g.配置完成后点击Done---->Apply
5.把模型Boy拖进场景中,会自己挂载一个Animator的组件
Controller属性放动画控制器
Avator属性放映射的BoyAvator文件
6.在res文件夹下创建一个动画控制器Create---->Animator Controller,叫做anim_ctrl,双击打开,可以用鼠标中键按下拖动背景
7.动画控制器配置
a:动画控制器anim_ctrl打开:Parameters是动画控制器所带的参数列表,Layers是当前的动画层
b: 动画状态机
(1) 动画状态机必然包含有3个动画状态单元 Any State, Exit, Entry;
(2) 动画状态机可以包含多个动画状态单元;
(3) 还可以包含子动画状态机;
c: 动画状态单元的创建:
在创建之前可以查看这个动画的效果,在Assets\Animations\AnisForFight目录下,点击某一个,再点击Animation栏,下面的播放按钮可以播放。
方法(1): Animator窗口中鼠标右键 在菜单中选择 Create State-->Empty;第一次创建的时候会被设置为默认动画状态并显示为黄色,Entry会直接指向它,
再创建一个就不会是默认状态了显示为灰色,也可以在任意非默认单元上右键 Set As Default来设置默认的动画状态,同时只能有一个默认的动画状态。
方法(2): 将动画文件拖入到Animator窗口;
我们创建一个默认的动画状态单元叫idle,关联它的Motion属性,就是在Assets\Animations\AnisForFight\[email protected]下的idle文件,这个在面板中展开[email protected]才能看到。
再创建一个动画状态单元叫jump,关联它的Motion属性,就是在Assets\Animations\AnisForFight\[email protected]下的take 001文件,这个在面板中展开[email protected]才能看到。
测试:把jump设置为默认动画状态单元,关联控制器到Animator组件,运行一下,发现模型Boy可以播放动画。
d: 过渡条件连接(从一个动画过渡到另一个动画):
(1)将鼠标放在状态单元上,鼠标右键-->Make Transition,创建动画过渡条件,并再次点击在另一个状态单元上,完成过渡条件连接;
(2)点击两个状态之间的连线,右边是一个过渡的效果,可以点击播放,下面是一个过渡条件,默认是没有过渡条件的,我们可以添加。
(3)在状态机左边的Parameters面板,里面的参数可以用来控制条件变量,首先要创建一个参数,点击+号,选择int类型,名字叫anim_state,默认值是0
(4)创建好参数后,再点击两个状态之间的连线,点击Conditions下面的+号,添加一个条件,就是以anim_state为条件变量,可以Greater、Less、Equals、Not Equal------>0的时候跳转
(5)创建一个脚本来控制跳转,叫anim_test
打开
以上是关于unity新手求助,关于多个模型共享骨骼动画的问题的主要内容,如果未能解决你的问题,请参考以下文章