Unity 项目,需要对一个玩家拔武器的动作中,实现武器挂点的切换(从背部 挂到手上)。
1. 一种方案,动画美术直接编辑动画,定位到要变化挂点的帧(比如24帧),在Events里添加一个动画事件, 名字规范成 TakeWeapon
这个方案
优:让美术准确控制帧数, 可以个性化
劣:所有模型该动作都要加一下。
方案二,用程序添加
网上有animation添加事件的
AnimationEvent evt =
new
AnimationEvent();
evt.time = 0;
evt.functionName =
"Test"
;
animation.GetClip(
"ani"
).AddEvent(evt);
但我们现在用的新动画系统Animator, 如何找到对应名字的动画呢?
找了一下 Animator的接口和成员变量,还是有一个可用的:
for(int i=0;i< animator.runtimeAnimatorController.animationClips.Length;++i)
{
if(animator.runtimeAnimatorController.animationClips[i].name == name)
{
return animator.runtimeAnimatorController.animationClips[i];
}
}
然后就可以
AnimationEvent evt =
new
AnimationEvent();
evt.time = 24f/30;
evt.functionName =
"TakeWeapon"
;
animClip
.AddEvent(evt);
劣:时间不太好做个性化。
事件绑定好了,但是执行时报错误:
原来 TakeWeapon 方法所在脚本必须挂在Animation(或Animator)所在GameObject上!