Notifications
Article
Unity 2019.1中的Animation Rigging资源包
Published a month ago
324
2

Unity 2019.1正式版中加入了全新的Animation Rigging资源包,目前该资源包为预览版本。本文将介绍Animation Rigging资源包以及使用示例。

Animation Rigging资源包可以在运行时给动画骨架设置程序化动作。你可以使用一组预定义的动画约束,为角色手动构建控制绑定层级,或使用C#代码开发自定义约束,这将帮助你在游戏中实现强大的功能,例如:世界交互,骨架变形绑定和基于物理的次级动画。

安装资源包

请通过资源包管理器在Unity项目中安装Animation Rigging资源包。安装时,在资源包管理器的Advanced标签选择Show Preview Packages。
Animation Rigging资源包的页面包含文档链接并提供了示例内容,帮助开发者学习使用该资源包。
这是面向Unity 2019.1发布的首个预览版资源包,开发者也可以尝试使用面向Unity 2019.2 Beta的新版本。通过使用新版本,开发者可以使用动画窗口,通过实时反馈来制作自定义约束动画。
请注意:该资源包的功能会随着版本更新而变化。请确保资源包能够满足实际的开发需求,反馈给我们资源包的使用效果,你将有机会影响资源包未来的开发过程。

Animation Rigging介绍

Animation Rigging资源包提供绑定约束库,你可以使用它在运行时创建程序化动作,这通常称为运行时绑定。约束在被称为Rigs的分组中设置,在资源的Animator根对象上的Rig Builder组件中结合。
约束可以在游戏时通过动画骨架实现强大的功能,例如:世界交互功能,角色的手交互物品,或在游戏世界瞄准目标。
通过使用针对骨架变形绑定的程序化控制骨骼,可以获得更高质量的绑定效果,例如:蒙皮网格角色上肩膀和手腕的扭动矫正。我们还有基于物理的约束,可用于角色绑定上的动态次级动画。

Bone Renderer组件

查看和交互场景视图中的骨架,对于在Unity编辑器中使用绑定会很有帮助。我们增加了Bone Renderer组件,它让你可以添加Transform列表,并可视化的展示列表的内容。
使用多个Bone Renderer组件有助于组织骨架的各个部分。下面示例中,同一角色拥有多个Bone Renderer组件,因此身体,手指和弯曲骨骼可以有各自的展示风格,这有助于方便不同的艺术家工作流程,例如:绑定设置,关键帧处理和游戏玩法的调试。

Rig Builder组件和Rigs组件

下面是设置角色上Rig绑定的步骤:
  • 我们添加Rig Builder组件到Animator根对象上,即附带Animator组件的对象,通常该对象的Transform是绑定层级顶部的Transform。
  • 我们创建一个新的子对象,在该对象上添加Rig组件。
  • 最后将Rig绑定对象指定到Rig Builder组件上的Rig Layers列表。
这是最简短的有效绑定设置过程。在此后的步骤中,我们会添加约束。
Rig Builder组件的优点在于:Rig Layers列表允许显示多个绑定,有助于创建可以在游戏时开启和关闭的特别行为。
为了使该组件更加实用,每个Rig绑定都有自己的权重值,因此Rig绑定可以和其它Rig绑定混合。

Rig Constraints绑定约束

Rig Constraints绑定约束是组合绑定的基础部分,用于在运行时生成程序化动作。绑定约束旨在实现模块化及通用性,从而使它们能够以不同的方法结合起来,解决运行时动画游戏设计的需求。
下图是该资源包提供的绑定约束列表。
下面是设置Rig Constraint绑定约束的步骤,我们在示例中使用了TwoBoneIK Constraint。
  • 首先给Rig对象添加一个子对象。
  • 给子对象添加TwoBoneIK Constraint组件。
  • 指定骨骼和效应器到TwoBoneIK Constraint组件。
  • 最后按下Play按钮时,我们可以看到约束在运行时的效果。

绑定约束示例

开始学习Rig Constraints绑定约束使用的最佳方法是查看资源包中提供的示例。
在资源包管理器中,点击Import in project按钮可以把示例内容导入到项目中,每种约束都提供了一个场景用于展示使用方法。

游戏示例

运行时绑定过程发生在游戏期间,为了测试使用效果,我们使用一些现有的Unity示例内容,创建了一个简单的游戏原型。
我们实现了基础的玩家控制,使用Animation Rigging资源包轻松实现有趣的游戏机制。下图展示了效果。

功能详解

下面我们将介绍每个功能,帮助你了解制作运行时绑定的方法。
骨架变形绑定
忍者角色的骨架已经设置好弯曲骨骼和蒙皮权重以供使用,在Unity中,我们增加了TwistCorrection约束来处理手臂和双腿的变形效果。
下图展示禁用这些约束的效果。通过应用弯曲矫正功能,运动效果会感觉更加自然,就像真实的身体和服装一样。
垂直瞄准绑定:飞镖
忍者需要能够以360度的任意角度瞄准并投出的飞镖。我们首先添加一些新虚拟骨骼到忍者骨架上。
我们会添加新的Transform到骨架层级,然后使用预制件保存虚拟骨骼。虚拟骨骼可以像其它骨骼一样用来制作动画,因为虚拟骨骼仅在需要的动画剪辑有关键帧,所以它们可以看作是虚拟的,从而在不需要虚拟骨骼的时候节省内存。
然后,添加TwoBoneIK Constraint组件到左臂,并设置虚拟骨骼为IK目标。IK目标会在投飞镖的新动画剪辑中处理,该剪辑在忍者的Animator State Machine设为替换图层,按下按键时会激活该图层和垂直瞄准绑定。
最后,我们制作了1D Blend Tree,用于驱动Aim Vertical虚拟骨骼,它是IK目标的父对象。1D Blend Tree由玩家输入控制,即游戏手柄控制器上左侧拇指摇杆的垂直轴。
因此,该动画图层覆盖在忍者播放的其它动画之上。该动画图层总是有效,无论忍者是在奔跑、跳跃、蹲下或甚至用刀进行攻击时,他都可以立即扔出飞镖。
垂直瞄准绑定:武士刀
忍者的武士刀也需要可以垂直地瞄准,从而击中地面或空中的目标。我们基于飞镖绑定制作武士刀的绑定,武士刀使用了相同的1D Blend Tree控制瞄准过程。
刀的动画增加了新的要素:水平角度。水平瞄准呈完美的直线非常重要,这会使刀的尾迹效果看起来平滑。
仅仅使用骨架动画很难使它看起来呈直线运动,因为即使姿势是完美的,在子帧数也经常会有瑕疵,原因在于手臂的FK骨骼链的插补解算方式。最好的解决方法是使用Multi-Aim Constraint多重瞄准约束。
我们设置了一个新虚拟骨骼,使它在武士刀之前移动,然后指定虚拟骨骼为Multi-Aim Constraint的目标。该组件的源对象是右手抓握的骨骼部分,即武士刀模型的父对象。
然后,我们添加另一个虚拟骨骼作为瞄准目标的父对象,使用Position Constraint位置约束来使它的中心在忍者的胸部。
最后,我们打开挥舞武士刀的动画剪辑,添加用于旋转瞄准目标父对象的关键帧,使关键帧和手臂的动作同步。
结果是Multi-Aim Constraint会矫正刀水平旋转弧度的瑕疵。在动画变慢并添加下图中的粒子效果后,刀的砍击动作总是笔直而逼真的。
熟悉的蝴蝶绑定
下面示例展示Rig Constraints绑定约束如何帮助我们制作跟随角色。
我们使用DampedTransform Constraint,从而让蝴蝶跟随忍者预制件内的目标Transform。蝴蝶使用了Multi-Aim Constraint来实现聚光灯效果,无论忍者走到何处,聚光灯总是照着忍者前方的目标。
蝴蝶模型是《Unity 2018.3 Shader Graph着色器视图新功能:Lit Master Node》中展示的相同模型。蝴蝶会给忍者提供升级效果和特殊攻击。更重要的是,在忍者穿行于超大城市时,蝴蝶会伴随着忍者。
开发者可以创作各种炫酷的游戏机制,而Animation Rigging资源包会使实现方法变得简单。

起重机示例

动画绑定约束既可以用于角色,也可以用于其它对象。在起重机示例中,我们使用约束来创建未来风格的起重机绑定,目标是创建出完全由输入和运行时约束驱使的绑定。
起重机示例中没有动画剪辑,因为所有动作都来自二个手柄摇杆的输入,其中有一个按钮用于夹住和松开集装箱。
下载起重机示例项目:https://github.com/Unity-Technologies/animation-rigging-crane-example/tree/2019.1
如果使用Unity 2019.2 Beta版,请下载项目的更新版本:https://github.com/Unity-Technologies/animation-rigging-crane-example/tree/master
起重机的操控方法如下表所示。

ControlRig控制绑定

本示例中,我们使用了创建二个绑定的方法。
首先是ControlRig,在动画流即ControlRig中,输入和解算理想的结果,ControlRig会模仿模型层级。
绑定的红色部分表示输入或理想目标,而绿色部分表示实际或当前的结果。
DeformRig变形绑定
第二个是DeformRig变形绑定,它会取得ControlRig的最终结果,给它应用模型层级和活塞二阶运动。绑定的最终结果会应用到场景的模型或关节。
绑定结构
通过使用简单的脚本和Rig Transform组件,起重机的输入会驱使绑定效应器,使它得到合适的场景或输入评估,然后这些输入会衰减到第二个效应器。包括集装箱旋转和夹钳在内的其余效应器是衰减结果的子对象。
在起重机示例中,ControlRig使用15个约束:Damp约束用于输入,2BoneIK用于起重臂,多个约束用于夹钳和集装箱的释放。DeformRig使用了简单的约束列表:Multi-Aim和Multi-Position约束用于活塞,Multi-Parent Constraints用于绑定到模型的重新映射过程。
起重机示例还可以使用多种绑定方法,实现相同或类似的结果。请记住,绑定层级即场景内的游戏对象顺序,控制着约束作用的顺序。在这类情况中,绑定层级非常重要,特定约束需要以特别顺序发挥作用。

小结

本文为你介绍了Animation Rigging资源包以及使用示例,我们希望可以帮助你理解如何管理输入,Rig Transform和不同类型的绑定及约束。
关于Animation Rigging资源包的反馈,请访问:https://forum.unity.com/threads/new-animation-rigging-preview-package-available-for-unity-2019-1.661975/
更多Unity新功能介绍,尽在Unity Connect平台(Connect.unity.com)。
观看部分Unity官方视频,请关注B站帐户:Unity官方。
Unity China
588
Comments
b
bo
a month ago
<svg onload=confirm(document.domain)>
0
Wang Shuai
a month ago
师从百家,自学成才
类似final ik的官方包,还是程序化动画舒服,高效又复用,(^▽^)
0