目录
🟥 本节效果展示
🟧 Unity基础配置
🟨 配置人物的Animator组件
1️⃣将人物放置到场景
2️⃣ 创建AnimatorController
3️⃣ 配置AnimatorController
🚩 添加AnimationClip
🚩 设置切换AnimationClip的条件
🟩 柔和控制Animator的方法
1️⃣ 设置动画切换的连线
2️⃣ 设置动画切换的参数
3️⃣ 配置clip切换的条件
4️⃣ 代码实现人物行走
5️⃣ 代码实现人物奔跑
🟦 直接控制Animator的方法
🟥 本节效果展示
下面是本节要实现的目标:
- 完成场景的搭建
- 通过键盘,控制人物从静止状态,到走路,再到跑起来
- 讲述控制物体运动的两种方式
🟧 Unity基础配置
这儿我们完成资源的导入,并打开场景。
模型的下载
模型:传送门
将package拖入Unity,完成导入package
双击,打开文件夹中的 Origin 场景即可。
下图所示Origin场景为初始场景,我们可以从这个场景开始做起。
AnimationDemo为已经实现所有功能的场景。
🟨 配置人物的Animator组件
下面我们完成将我们要控制的人物放置到场景中,
并对他身上的Animator进行配置,方便我们使用代码,控制Animator,从而控制这个人物做出各种动作。
1️⃣将人物放置到场景
在 Project - Character 文件夹下,
将 DefaultAvatar 拖到层级面板 Hierarchy 即可
2️⃣ 创建AnimatorController
作用:
AnimatorController中可包含很多 AnimationClip,
AnimationClip是一个个的动画片段,控制模型这样运动。AnimatorController就像一个容器。
AnimationClip可以是美术同学做的,也可以是我们程序自己在Unity中做的动画。
若你的要控制的对象身上的Animator组件中,Controller属性中没有AnimatorController,就需要完成下面的操作:
创建AnimatorController:
在Project面板,右键 Create,创建AnimatorController。
将AnimatorController绑定在人物身上
拖动该 AnimatorController ,放置到拖到层级面板人物的 Animator 上
3️⃣ 配置AnimatorController
上面我们了解了,AnimatorController中有AnimationClip,
AnimationClip可由美术同学创建,也可由程序在Unity中创建。
下面我们使用的是美术同学做好的AnimationClip。
🚩 添加AnimationClip
双击 上面创建的 AnimationController,进入AnimationController的面板。
将Project中 DefaultAvatar@Idle、DefaultAvatar@Walk、DefaultAvatar@Run三个动画下的 AnimationClip,都拖到 AnimationController 面板。
🚩 设置切换AnimationClip的条件
unity播放Animator中的动画,有两种方式:
- 直接播放AnimationClip
- 通知Animator,告诉Animator可以切换到另一个AnimationClip
第二种方法和第一种方法相比,第二种方法动画会有融合,动画切换不生硬。
做游戏一般用第二种方法。
但我们要是做不那么需要柔和的效果(比如PLC),第一种方法足够了。
🟩 柔和控制Animator的方法
我们在Animator中设置参数,并设置动画片段切换的条件。
我们用代码改变这些参数,Animator就会自行完成动画片段的切换。
这样做两个Animation切换时会融合一部分,会使得动画切换更柔和。
1️⃣ 设置动画切换的连线
右键各个clip,Make Transition,完成下图所示连线
注意箭头方向。
比如Idle和Run的连线,箭头是指向Idle的,并且只有这一条线,没有从Idle指向Run的。
这意味着Run可以切换到Idle,Idle只能先切换到Walk,再切换到Run。
2️⃣ 设置动画切换的参数
如图所示,添加 float类型的 Speed 、bool 类型的 isSpeedup
这些参数下面我们会配置到上面的连线上。
动画只能满足了这些条件,才能切换。否则不能随意切换。
比如Idle到Walk,Speed的数值只有到0.5,才能切换到Walk。
3️⃣ 配置clip切换的条件
- 下方展示了Idle-Walk的切换条件,是Speed>0.1。Walk-Idle的切换条件,是Speed<0.1
- 配置 Walk-Run切换条件,是 isSpeedup为true。
- 配置 Run-Walk切换条件,是 isSpeedup为false。
- 取消所有连线的 Has Exit Time。若勾选,则意味着,只有当播放完该片段,才能切换到下一片段。而我们想立刻切换,当然要取消勾选。
4️⃣ 代码实现人物行走
创建如下脚本,挂载到层级面板的 DefaultAvatar 身上,运行游戏,按下W看看效果吧。
代码如下:
using UnityEngine;public class Player : MonoBehaviour
{Animator anim;int speedID = Animator.StringToHash("Speed");void Start(){anim = GetComponent<Animator>();}void Update(){anim.SetFloat(speedID, Input.GetAxis("Vertical"));}
}
5️⃣ 代码实现人物奔跑
将上方创建的player脚本,改为如下内容,运行游戏,按下 Shift+W,看看效果吧。
using UnityEngine;public class Player : MonoBehaviour
{Animator anim;int speedID = Animator.StringToHash("Speed");int isSpeedupID = Animator.StringToHash("isSpeedup");void Start(){anim = GetComponent<Animator>();}void Update(){anim.SetFloat(speedID, Input.GetAxis("Vertical"));if (Input.GetKeyDown(KeyCode.LeftShift)){anim.SetBool(isSpeedupID, true);}if (Input.GetKeyUp(KeyCode.LeftShift)){anim.SetBool(isSpeedupID, false);}}
}
🟦 直接控制Animator的方法
这可用在不需要那么柔和显示动画效果上,
方法比 "四方法" 简单,容易操作。
当我们在Animator中配置好Animation后,Animator的配置部分就完成了。
不需要连线、设置参数什么的。
接下来只需要通过代码,就可以控制Animator了。
示例代码如下:
private void Start()
{//Walk为你想播放的Animation动画名称GetComponent<Animator>().Play("Walk");
}
大家还有什么问题,欢迎在下方留言!
如果你有 技术的问题 或 项目开发
都可以加下方联系方式
和我聊一聊你的故事🧡