# 分层混合
动作游戏或FPS游戏中,经常会有人物上半身和下半身独立控制的需求。例如FPS游戏中,上半身有举刀、举枪、换武器、射击等动作,下半身有静止、跑、跳、蹲等动作。如果要为每一种组合创建一套动作,会使得AnimationClip非常冗余,影响资源加载时间和内存占用。分层混合
可以有效的解决这类需求。
本章我们将基于一个正在奔跑的角色,为他添加一个持枪的动作。
首先我们为角色创建一个AnimatorController
,内含一个Running
状态。如果不知道如何创建角色或者Controller,请参考骨骼动画入门指引章节
在Layers
选项下点击加号图标,创建新的混合层(BlendLayer),命名为Upper
。并在右侧添加Shooting
状态,播放射击动作。
点击Upper右侧的齿轮图标,将Blending设置为Override
,Weight设置为 1
保存动画状态机运行,发现播放了站立射击的动画。原因是BaseLayer
层中的Running
动画被Upper
层的Shooting
动画覆写(Override)了
# 使用AvatarMask
小游戏框架中我们使用骨架蒙板(AvatarMask)资源,用来表示骨骼的每一个节点是否要受该层级动画的控制。
在这个案例中,实际上要求上半身是射击的动作,下半身是奔跑的动作。所以我们只需要创建一个AvatarMask,并且选中上半身的节点,并让Upper
混合层使用该AvatarMask即可。
在Project
面板中,右键->新建->Animation->avatarmask,即可创建一个AvatarMask
。进入Inspector
面板中,在Use Skeleton from
中选择Running
动画的骨架,即可将骨架配置导入。
导入后即可看到该骨架的全部节点的层级关系,前面的勾选框表示该节点是否要受控制。我们将Hips节点、LeftUpLeg及其子节点、RightUpLeg及其子节点取消勾选,其余的节点即表示上半身。
进入Upper混合层的配置中,将Mask字段设置为刚刚创建的AvatarMask。
保存状态机,运行场景,即可看到分层混合后的效果