动画模块没有太多好说的,更多是练习积累的经验


 


Animator动画控制器


  • AnimatorControllerLayer 状态层,layer层级越高,动作优先级越高
  • AnimatorStateMachine 状态机
  • SubAnimatorStateMachine 子状态机

RuntimeAnimatorController 运行时动画状态机



Animate Physics 适合动画有物理的相互作用



ApplyRootMotion 用动画还是脚本控制位置



Culling Mode 动画裁剪



Write Default 将动画改变的数据结束动画后复原


Transition



unity3d 进度条控制动画 unity结束动画_状态机




  • Transition Offset部分的next State是不会执行的
  • Duration 部分是两个动画的混合。fixed duration 打钩的话 duration会以秒计算,而不是根据state的长度
  • order interrupt  是否只能被高优先级的transition打断?

 


当勾上时,可以选择



Value

Function

None

這個transition不會被打斷

Current State

目前State的其他transition如果達成條件,會打斷目前的transition

Next State

下一個State的其他transition如果達成條件,會打斷目前的transition

Current State then Next State

都可以打斷,只是由Current State優先

Next State then Current State

都可以打斷,只是由Next State優先

意思就是说,勾选后,更高优先级的Transition可以打断当前这个Transition,比如我们要用AnyState到Hurt状态,如果此时正在发生其他状态间的Transition,那么设置None的话就只能等这个Transition结束才能切换到Hurt了。但是用其他选项就可以打断


可以用打断实现一些比较特殊的动画,比如硬直结束后可操作的攻击动画


Solo 和 Mute 的功能

不用变量控制的状态转移



  • Mute:禁用状态转移(哑掉transition);
  • 如果不选择solo,在没有变量控制(结束条件为“exit time”)的情况下,该状态优先选择动作列表中最前(或者说最上的)的状态转移;
  • 如果选择了某个solo,那么在没有变量控制(结束条件为“exit time”)的情况下,优先选择标记solo的状态转移;
  • 如果有多个状态转移选中了solo,那么优先选择这些已选中solo的状态转移中,在动作列表中靠前的状态转移;



基本的原则是,如果一个状态被标记为solo,那么其余的状态转移将被视为选中mute;

如果solo和mute同时被选中,那么mute的优先级更高(即视为只选中了mute)


连击的Transiton



问题目标:如combo1,至少播放0.6倍的动画,然后如果有输入就转换状态



判断输入的时间必须要小于exit time, 有exitTime时transition的判断发生在exit time结束时,过了exit time就不进行condition判断了


Dawnblade中不用exit time,而是交给程序控制,何时可接受输入并切换




Blend Tree 动画混合树



1D就是一个参数混合多个动画



2D就是两个参数混合多个动画,一个XY空间中,点距哪个动画近就受其影响大



其他


AnimatorStateInfo 
 
 
 

   Animator.StringToHash



Animation帧动画


AnimationCurve 
 
 
 

   AnimationEvent

 



IK:正向运动学,根骨骼带动子节点骨骼运动



FK:反向运动学,由子节点带动父节点运动。

 


在Animator窗口中,对于要使用IK的动画状态勾上Foot IK选项,在Base Layer中勾上IK Pass选项。然后在代码中实现OnAnimatorIK函数来控制IK

 

Animator.SetIKPosition 
 
 
 

   SetIKRotation 
 
 
 

   SetIKPositionWeight 
 
 
 

   SetIKHintPosition 
 
 
 

   SetLookAtWeight 
 
 
 

   ……

 



动画重定向



同一套Avatar骨骼的不同角色,动画绝对可以重用


动态控制动画帧事件



可以用Animator.animationClips获取,然后设置AnimationEvent触发time,functionName


AnimatorOverrideController 运行时修改挂载的clip