文章目录
-
-
-
- 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的使用