欢迎大家继续学习 Unity 游戏编程基础
上一节,我们讲解 动画系统中的动画片段与角色替身的知识要点。
本节,我们讲解动画状态机的要点 [空白_录音] 本节将用 PPT
讲解和项目演示的方式介绍动画状态机的知识要点 我们在项目演示的动画状态机在《慕课英雄》中的简易版中使用
大家可以根据自己的专业基础和学习情况从下面学习方法中进行学习 下面进入 PPT 讲解阶段。
首先回顾 Mecanim 动画系统的工作流
完成资源导入和角色建立后,我们使用动画控制器控制角色的运动 下面我们介绍
Animator 组件,也就是说动画控制器 该组件用于控制游戏对象的动画包括建立状态机
调整动画参数以及使用代码控制动画 下面我们给游戏对象添加
Animator 组件 首先选中游戏对象,再选择 Component
的菜单栏,点击 Mis 菜单项目中的 Animator,即可完成游戏对象 Animator
组件的添加 [空白_录音]
本页 PPT 给出 Inspactor 视图中的 Animator 组件的示意图 下面我们介绍
Animator 组件的常用属性, Controller 表示游戏对象的动画控制器的设置
Avatar 表示游戏对象的 Avatar 设置,Apply Root Motion
表示游戏对象的位移或旋转是否由动画片段控制 该属性勾选表示游戏对象的位移和旋转由动画片段控制
该属性不勾选表示游戏对象的位移和旋转由脚本控制 [空白_录音]
通常情况下,一个游戏对象拥有多个动画片段 Animator Controller
(动画控制器),允许开发者管理游戏对象的一系列动画片段 我们介绍动画控制器的两个功能。
Animation State Machine (动画状态机) 用于管理动画的播放与动画之间的过渡。
Animation Layers & Avatar Mask 动画层和身体蒙版用于管理不同身体部位的动画。
本节我们介绍动画状态机 (Animation State Machine)
在游
戏中,我们使用键盘控制角色的行为,例如 WSAD
控制角色移动,空格键控制角色的跳跃 角色的行为影响动画片段的播放与切换,例如角色在移动时
播放移动动画,在跳跃时播放跳跃动画 在 Unity 中,我们使用
Animation State Machine (动画状态机) 控制角色动画片段的播放与切换
[空白_录音] 下面介绍动画状态机的概念。
动画状态机的基本思想是 让角色在给定的状态执行特定的动作
状态执行存在过渡,用于改变角色所处的状态 状态过渡需要满足一定的条件:动画状态机使用参数,控制状态之间的过渡
[空白_录音] 本页
PPT 给出动画状态机的一个示例,该示例中包含三个动画状态分别为 Idle、 Walk、 Run 表示角色的停住、 行走以及奔跑状态。
Walk 状态与 Idle 状态 之间可以进行状态过渡, Walk 状态与 Run
状态之间可以进行状态过渡 [空白_录音]
本页 PPT 给出示例中,动画状态的过渡条件 当角色处于
Idle 状态,且 Bool 类型参数 isStop 值为 false 时 角色从
Idle 状态过渡到 Walk 状态,当角色处于 Walk 状态 且 Bool
类型参数 isStop 值为 true 时,角色从 Walk 状态过渡到 Idle 状态
当角色处于 Walk 状态,且 float 类型的参数 Speed
值大于 15 时 角色从 Wolk 状态过渡到 Run 状态,当角色处于
Run 状态,且 Speed 参数小于 15 时 角色从
Run 状态过渡到 Walk 状态 下面我们讲述在
Unity 编辑器中,实现上述动画状态机的步骤 首先导入 Unity 标准资源中的角色和动画资源。
在 Project 视图中点击鼠标右键,选择 Import Package 中的 Characters 完成角色和动画资源的导入。
我们使用 Ethan 模型作为示例中的角色,在 Project 视图中,把
Ethan 模型拖入 Hierarchy 视图中,完成 Ethan 角色的创建 我们在 Project
视图中创建动画控制器,重命名为 Ethan 表示 Ethan 的动画控制器。
创建完成后,我们把新创建的动画控制器 应用到 Ethan 对象,Animator
主键的 Controller 属性中 下面我们打开 Animator
视图 在该视图中完成动画状态机的设置,Animator 视图的打开方式
很简单,点击 Window 菜单栏中的 Animator,即可打开 Animator 视图 下面我们简单介绍 Animator 视图。
Animator 视图左侧包括 Layers & parameters 两个标签
分别用于管理动画层和动画参数 Animator
视图的右侧用于动画状态机的设置 下面我们在
Animator 视图创建动画状态 我们在 Animator
视图的空白处点击鼠标右键 选择 Create State 下面的 Empty ,完成第一个动画状态的创建
第一个动画状态创建后,我们发现 Avte 自动建立一个动画状态的连接
表示该动画状态是角色的初始动画状态 在 Animator 视图中点击动画状态,我们可以在
Inspector 视图中,设置该动画状态的属性 包括动画状态的名称、
动画状态播放的动画片段 以及该动画状态中动画播放的速度。
我们把动画状态命名为 Idle 动画状态播放的动画片段设置为
HumanoidIdle,表示人形停住动画 [空白_录音]
我们以相同的方式创建 Walk 和 Run 的状态
并把他们的动画片段分别设置为人形行走动画和人形奔跑动画 以上步骤完成了动画状态机中动画状态的创建和设置
下面讲解添加动画参数的步骤 我们讲解
Animator 视图左侧 Parameter 标签栏中的加号按钮,添加动画参数
本示例中,我们添加一个 Float 类型的参数——Speed 用于表示角色的数字大小,同时添加一个
Bool 类型参数——isStop 表示角色是否为停止状态
下面讲解动画状态过渡的创建与设置 首先在动画过渡的起始状态上点击鼠标右键
选择 Make Transition 选项,然后在动画过渡的结束状态上
点击鼠标左键,即可完成动画状态过渡的创建 选中动画状态过渡线
我们可以在 Inspector 视图中,进行动画状态过渡的参数设置
[空白_录音] 本节 PPT
给出 Inspector 的视图中 动画状态过渡的参数设置。
下面介绍动画状态过渡的常用参数 首先 Has Exit Time
表示动画状态的过渡是否有退出时间 若勾选该属性,动画状态过渡将延迟执行 延迟的时间在 Exit
属性中设置 接着是动画状态的过渡曲线,我们通过调整动画状态的过渡曲线 管理动画状态的过渡、
动画片段的切换动画 最后是动画状态过渡的条件设置
表示动画状态过渡需要满足的条件,例如 Walk 状态过渡到 Idle 状态的过渡条件为
isStop 值等于 true 我们根据上述状态过渡的设置方式完成
Walk 和 Idle 之间、 Walk 与
Run 之间的状态过渡,以上步骤完成了角色状态机的创建与设置
下面我们在脚本中控制动画参数 在
State 函数中,我们使用 GetComponent 函数,获得游戏对象的 Animation
组件 [空白_录音]
在 Update 函数中,我们使用 Input lead GetKey 函数,获取用户输入 根据用户的输入,我们使用
Animator 类的 SetBool 函数和 SetFloat 函数,分别设置动画的 isStop
和 Speed 值
我们把控制动画的参数的脚本绑定到 Ethan 对象
同时我们不勾选 Apply Root Motion 属性,表示不使用动画控制 Ethan
对象的移动和转向 最后我们运行测试样例
我们可以使用键盘控制角色动画的播放 [空白_录音]
下节,我们讲解 Unity 动画系统中,动画层与身体遮罩的知识要点
最后进入演示环节 演示环节的内容包括敌人动画控制器的制作
[空白_录音]