文章目录
-
-
-
- 16.1 动画混合树BlendTree
- 16.2 具体流程
-
- 16.2.1 导入模型
- 16.2.2 打开Animator编辑器
- 16.2.3 创建混合树Blend Tree
- 16.2.4 进入混合树
- 16.2.5 混合树重命名
- 16.2.6 退出混合树
- 16.2.7 混合树变量
- 16.2.8 给混合树添加动画(Motion)
- 16.2.8 调整混合树中不同动画过渡的临界值
- 16.2.9 测试混合过渡
- 16.2.10 使用代码设置Animator变量
-
-
简介:我是一名
Unity
游戏开发工程师,皮皮是我养的猫,会讲人话,它接到了喵星的特殊任务:学习编程,学习Unity
游戏开发。于是,发生了一系列有趣的故事。
文章图片
16.1 动画混合树BlendTree 【Unity3D|《学Unity的猫》——第十六集(Unity动画使用混合树BlendTree实现动画过渡控制)】上次做了一个打字机游戏给皮皮。
前情回顾:《学Unity的猫》——第十三章:Unity使用Animator控制动画播放,皮皮猫打字机游戏我:“上次那个打字机游戏有个逻辑可以优化一下。”
皮皮:“我觉得你可以把难度再加大十倍。”
猫族果然有种族优势,现在打字速度已经远超于我。
文章图片
我:“我想说的是,动画控制的逻辑可以优化一下。”
皮皮:“我记得你是用
Animator
组件来控制动画的。”我:“是的,打字速度快,连击达到一定数量后,动画状态从慢走变成快跑,这里可以使用混合树来控制。”
皮皮:“什么是混合树呀?”
我:“混合树可以很方便地通过变量控制多个动画的混合效果,比如角色的
idle
(站立)、walk
(慢走)、run
(快跑)。”idle
、walk
、run
三个动画独立效果如下:idle
文章图片
walk
文章图片
run
文章图片
我们想要通过一个速度变量
movespeed
来混合这三个动画,这个时候就可以使用混合树。最终效果如下:
16.2 具体流程 16.2.1 导入模型 从
AssetsStore
下载一个带动画的模型,比如这个猫女孩文章图片
资源地址:https://assetstore.unity.com/packages/2d/characters/fancydoll-c000-little-cat-girl-112776
将模型导入
Unity
工程中。文章图片
16.2.2 打开Animator编辑器 点击菜单
Window -> Animation -> Animator
。文章图片
即可打开
Animator
编辑器,界面没有显示内容是因为我们没有选中.controller
文件。文章图片
选中
.controller
文件。文章图片
即可看到具体的动画状态机。
文章图片
16.2.3 创建混合树Blend Tree 在
Animator
编辑器界面空白处鼠标右键点击Create State -> From New Blend Tree
。文章图片
即可创建一棵混合树。
文章图片
选中它,可以在
Inspector
窗口中对节点进行重命名,比如重命名为MoveBlendTree
。文章图片
16.2.4 进入混合树 鼠标双击混合树节点,可以进入混合树内部。
文章图片
混合树内部如下
文章图片
16.2.5 混合树重命名 我们可以对混合树进行重名名。
文章图片
重命名后
文章图片
16.2.6 退出混合树 点击顶部栏的
Base Layer
即可退出当前的混合树。文章图片
退出成功
文章图片
16.2.7 混合树变量 创建混合树时,会自动创建一个
float
类型的变量,可在Paramters
标签页中看到,默认变量名为Blend
。文章图片
我们可以双击变量,将变量进行重命名,比如重名名为
movespeed
。文章图片
我们可以设置混合树使用的变量,如下,使用
movespeed
变量。文章图片
设置成功。
文章图片
16.2.8 给混合树添加动画(Motion) 在混合树根节点上右键鼠标,点击菜单
Add Motion
。文章图片
即可添加一个
Motion
。文章图片
我们想要混合
idle
、walk
、run
三个动画,所以需要三个Motion
。文章图片
将具体的
Motion
设置成具体的动画。文章图片
16.2.8 调整混合树中不同动画过渡的临界值 可以直接拖动混合视图调整临界值
Threshold
。文章图片
16.2.9 测试混合过渡 调整混合树的
movespeed
变量,可以看到Motion
之间的过渡。文章图片
将混合树节点设置为默认状态
文章图片
将猫女孩模型拖到场景中
文章图片
如下
文章图片
运行
Unity
,可以看到状态机正常进入混合树种循环。文章图片
进入混合树节点,调节
movespeed
变量,可以看到混合过渡效果16.2.10 使用代码设置Animator变量 上面我们是手动修改
movespeed
变量,实际运用中,我们很可能需要使用代码来设置。创建一个
Main
脚本,代码如下using UnityEngine;
public class Main : MonoBehaviour
{
public Animator ani;
private float m_speed;
private float m_interpolation = 1.5f;
void Update()
{
if (Input.GetKey(KeyCode.Space))
{
if (m_speed < 1)
{
m_speed += Time.deltaTime * m_interpolation;
if (m_speed > 1)
m_speed = 1;
ani.SetFloat("movespeed", m_speed);
}
}
else
{
if (m_speed > 0)
{
m_speed -= Time.deltaTime * m_interpolation;
if (m_speed < 0)
m_speed = 0;
ani.SetFloat("movespeed", m_speed);
}
}
}
}
将
Main
脚本挂到模型预设上,并赋值Ani
对象文章图片
运行
Unity
,按下空白键,即可自增movespeed
,松开空白键,movespeed
就会自减到0。完成。
如果有什么疑问,欢迎留言或私信。
《学Unity的猫》——第十七集:Unity的UGUI布局,皮皮猫的简历
推荐阅读
- Unity3D|《学Unity的猫》——第十三章(Unity使用Animator控制动画播放,皮皮猫打字机游戏)
- Unity3D|【游戏开发实战】Unity UGUI实现循环复用列表,显示巨量列表信息,含Demo工程源码
- Unity3D|(完结)Unity游戏开发——新发教你做游戏(七)(Animator控制角色动画播放)
- 每天记录学习的新知识 : ObjectAnimator 基础和用法
- Unity3d|Unity中的层级以及渲染顺序
- loading|水流波动效果的进度条
- Android|Android 补间动画(动画列表,平移,旋转,缩放,渐变,动画集合)
- android|Android Animator(Android动画)
- android|Android Animator的使用