自己项目中的Animator框架以及BlendTree动画混合树

最近自己在做一个RPG小项目,在使用动画状态机时发生许多需要注意的问题,于是自己不断改进最后得出了一个还不错的框架。

项目场景

自己项目中的Animator框架以及BlendTree动画混合树_第1张图片
Paste_Image.png
  • 使用到的模型是在Assets Store里下载的,模型有许多的动作极其不方便管理,对于动画的动作融合也十分的头疼。
自己项目中的Animator框架以及BlendTree动画混合树_第2张图片
Paste_Image.png
  • 模型总共有4把武器,武器分为:Pistol、Rifle、Launcher、Heavy共四种。
    -首先需要给模型的Animation Type改为:Humanoid
自己项目中的Animator框架以及BlendTree动画混合树_第3张图片
Paste_Image.png
  • 接着把他的各种动作绑定在他的模型的Avatar上
自己项目中的Animator框架以及BlendTree动画混合树_第4张图片
Paste_Image.png
  • 然后把各种武器都放在右手的骨骼上
自己项目中的Animator框架以及BlendTree动画混合树_第5张图片
Paste_Image.png
  • 虽然把整个场景用Navigation烘焙过路线,但是为了测试动画的转化这里没有用到Navigation。
自己项目中的Animator框架以及BlendTree动画混合树_第6张图片
Paste_Image.png

到了重点!!!如何给一个多动作的模型做一个好的Animator呢?

  • 这是我目前用到的解决方案
自己项目中的Animator框架以及BlendTree动画混合树_第7张图片
Paste_Image.png
  • 因为模型,每一种武器对应着不同的动作,所以我从动作出发,将每一种动作做成了不同了子状态机,通过WeaponChange_Int,用Animator中的SetInteger方法实现了不同武器之间动作的相互转换。
自己项目中的Animator框架以及BlendTree动画混合树_第8张图片
Paste_Image.png

*每一个武器对应着代码中的不同的枚举

自己项目中的Animator框架以及BlendTree动画混合树_第9张图片
Paste_Image.png
  • 通过枚举转化为Int值的不同来为每一种武器的动作进行区分
自己项目中的Animator框架以及BlendTree动画混合树_第10张图片
Paste_Image.png
  • 接着控制角色的移动(这里没有使用navigation.setDestination,使用Input.GetAxis返回值为-1-1之间的浮点数)
自己项目中的Animator框架以及BlendTree动画混合树_第11张图片
Paste_Image.png
  • 通过Input.GetAxis的返回值可以用来做BlendTree的动画融合功能

    • 这是Pistol武器的子状态机
自己项目中的Animator框架以及BlendTree动画混合树_第12张图片
Paste_Image.png
  • Pistol武器的移动分为Idle,Run_Forward,Run_Back,Run_Left,Run_Right
    接着进行动画融合
自己项目中的Animator框架以及BlendTree动画混合树_第13张图片
Paste_Image.png
  • BlendTree改变为2D的模式,通过Input.GetAxis得到的-1到1之间的返回值分别对前后左右进行判断从而实现角色的移动。
自己项目中的Animator框架以及BlendTree动画混合树_第14张图片
Paste_Image.png

之后每一把武器都用到此种方法,在BaseLayers层的动画状态机就看得清晰明了,要对每种武器进行不同的判断更改也方便许多。当然技能也可以用相应的子状态机来实现会方便很多。谢谢

你可能感兴趣的:(自己项目中的Animator框架以及BlendTree动画混合树)