1、目的
给角色添加素材中的动画,最终让角色动起来。
2、准备工作
当前的预设体中的Player对象还不够完善,需要删除掉再优化下。此时应当:Hierarchy中的Player对象切断和预设体的关联,同时删除Prefabs中的Player对象。
首先,点击Player -> Prefab -> Unpack Completely来切断和预设体的关联,变成了一个正常的对象。
然后,删除Prefabs目录下的Player对象。
3、添加Animator动画组件
在Assets -> Player -> Animation Controller下有6个动画控件,刚好对应Hierarchy中Player的6个部位(equippedItem除外)。
同时选中7个部位,然后按Ctrl键去掉equippedItem部位,再添加Animator脚本,相当于给6个部位都添加了Animator脚本。
然后依次将Assets的动画赋给对应部位的Animator的Controller,比如body的动画如下操作:
点击body动画,我们可以看到Animator详情如下:
点击Player -> body(该对象下有Animator组件)
然后在点击【Window -> Animation -> Animation】,可以看到动画界面:
选择一个动画点击播放,可以在Game界面中看到效果。
4、处理Event事件
运行程序,设置Parameters中的xInput为1,勾选isWalking。
发现Game中角色body在walk,但是报错了,报错信息如下:
'body' AnimationEvent 'AnimationEventPlayFootstepSound' on animation 'BodyNoneNoneWalkRight' has no receiver! Are you missing a component?
这句话的意思是:AnimationEventPlayFootstepSound事件没有对应的处理程序。
在body的各个动画中有AnimationEventPlayFootstepSound事件
但是我们没有在任何脚本中指定此事件。
做法:
在Assets -> Scripts下新建Animation目录,同时创建MovementAnimationParameterControl的脚本。
public class MovementAnimationParameterControl : MonoBehaviour
{
// Start is called before the first frame update
private void AnimationEventPlayFootstepSound()
{
}
}
然后将该脚本逐一添加到Player下的6个子对象上。
最后再次执行程序,报错消失了。
这说明:如果在Animation中创建了Event事件,则会触发该对象某个组件下同名的方法。