具体如何实现呢,且听慢慢道来。
举个栗子:现在跑酷游戏有个需求,人物在跑动时如果吃到磁铁道具的话需要举着磁铁奔跑,有多种实现方法,比如多加一个状态机,但是人物跳的时候也要举着磁铁,也多加一个状态机,让美术多出一个举着磁铁跳的动画,然后吃到磁铁的时候setTrigger(“magnetRun”)(我上个项目就是这么干的,说实话很傻),然后问题就来了,那人物跳的时候怎么办,模型总不能拿着磁铁跑然后跳起来磁铁就被藏起来了。好,你说再加一个状态机,那左移怎么办,右移怎么办,普通状态和道具状态是完全不同的两套动作,这时你发现你需要多写一套完全相同的逻辑,这样按照我们老大的话是极其low的,代码极其丑陋。这时你发现了一个神奇的小东西layer,什么东东,有什么用。
先上Unity官方的定义,取自Unity圣典
“Unity使用“动画层”来管理身体不同部分的复杂状态机。比如:你可以使用下半身(动画)层来管理走动/跑动;使用上半身(动画)层来控制投掷/设计动作。”( oh shit 简书更改不了字体大小 将就着看吧)
还是刚才的那个例子,这时你要完成一个人物举着磁铁奔跑的需求,你只需要增加一个layer,就叫magnet(磁铁)在里面加一个空的状态机为默认的,增加一个状态机叫magnet,增加一个trigger--magnet,当人物吃到磁铁的时候,settrigger("magnet"); 这时你神奇的发现动画完美的混合了,不管这个人是在做什么,跑,跳,倒,转弯,都会乖乖的举着磁铁。
如果你失败了,你会发现我写的不全,还有一系列属性需要设置,自己去百度吧,很简单的,注意设置avataMask的时候如果你的模型不是humanoid,简单地设置hunmanoid无效,你需要设置transform。
就这样,不用谢。