Unity3D技术之Mecanim 常见问题
我们针对玩家动画使用动画旧版系统 (Legacy System),您是否建议我们使用 Mecanim 代替?
Mecanim 是我们开发的当前动画技术,且该技术在持续改进之中。旧版系统保持“现状”。
我如何通过脚本访问 Mecanim 功能?
Mecanim 中的大多数功能由脚本控制,但我们可以在 4 个开发周期中以增量方式显示整个 API。
我如何创建类人角色的新动画?
您可以在此处 http://docs.unity3d.com/Documentation/Manual/HOWTO-importObject.html 所列的任何三维动画资源包中制作动画,并将其导入 unity。
在 Mecanim 中,我如何更改动画状态 (Animation State) 的运动?
您可以编写控制器脚本(或者使用演示中的一个脚本)来与播放动画的状态机 (State Machine) 交互。以下是一些链接:
导入
为什么动画器会自动添加到每个导入的网格中?
当前没有用来设置导入默认值的方法,但如果在导入设置中将装置 (Rig) 设为无 (None),则不会添加动画器 (Animator) 组件 – 可以同时用多个文件执行该操作
层
层的顺序是否重要?
是。层的评估顺序是从顶部到底部。设为重写的层将始终重写之前的层(如果它们有遮蔽图,则基于遮蔽图)
是否有一种在层之间进行渐变的内置方式?
没有用于层权重的自动模式。使用自己的淡入/淡出是个不错的方法 *
基础层权重是否始终认定为一个或是否应当在另一个同步层运行时将权重设为零?
基础层权重始终为 1,然而,如果将层设为*重写*,则会完全重写基础层。
如果同步层的长度与基础层中相应状态的长度不同,则会发生什么?
如果层的长度不同,则同步层会变得不同步。
是否有什么办法可以从没有文本格式名称的控制器中获得变量值?
可以用整数来辨识状态和参数。使用 Animator::StringToHash 来获得整数标识符。例如:
runState = Animator.StringToHash(“Base Layer.Run”); animator.SetBool (oneOffRun, false);
Avatar 和身体遮蔽图 (Masks)
是否有方法限定哪些骨骼属于身体遮蔽图组成部分?
身体遮蔽图与类人重定位解算器紧密结合在一起,所以目前无法限定。
是否有方法能够创建超出 LeftFoot、RightFoot、LeftHand、RightHand 数量的 AvatarIKGoal?
我们已在路线图上包含了此方法
动画曲线和事件
您是否可以向 Mecanim 添加动画事件?
动画事件已在我们的高优先级路线图上。我们建议使用动画上的额外动画曲线来模拟事件。结果不可能完全一样,但我们的许多用户使用此方法已获得成功!
包含曲线 (Curves) 的动画如何与没有曲线的动画融合?
如果一个动画包含曲线,而另一个没有曲线,Unity 将使用连接到曲线的默认参数值进行融合。 可以设置参数 (Parameters) 的默认值,这样,在拥有曲线参数 (Curve Parameter) 的状态 (State) 和没有曲线参数的状态之间出现融合时,融合将发生在曲线值和默认参数之间。 要设置一个参数 (Parameter) 的默认值,只需在“动画器工具 (Animator Tool)” 窗口中而非 LiveLink 中设置其值。