微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

《学Unity的猫》——第十六集:Unity动画使用混合树BlendTree实现动画过渡控制

简介:我是一名Unity游戏开发工程师,皮皮是我养的猫,会讲人话,它接到了喵星的特殊任务:学习编程,学习Unity游戏开发。
于是,发生了一系列有趣的故事。

在这里插入图片描述

16.1 动画混合树BlendTree

上次做了一个打字机游戏给皮皮。

前情回顾:《学Unity的猫》——第十三章:Unity使用Animator控制动画播放,皮皮猫打字机游戏

我:“上次那个打字机游戏有个逻辑可以优化一下。”
皮皮:“我觉得你可以把难度再加大十倍。”
猫族果然有种族优势,现在打字速度已经远超于我。

在这里插入图片描述

我:“我想说的是,动画控制的逻辑可以优化一下。”
皮皮:“我记得你是用Animator组件来控制动画的。”
我:“是的,打字速度快,连击达到一定数量后,动画状态从慢走变成快跑,这里可以使用混合树来控制。”

在这里插入图片描述


皮皮:“什么是混合树呀?”
我:“混合树可以很方便地通过变量控制多个动画的混合效果,比如角色的idle(站立)、walk(慢走)、run(快跑)。”
idlewalkrun三个动画独立效果如下:
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

在这里插入图片描述


我们想要混合idlewalkrun三个动画,所以需要三个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布局,皮皮猫的简历

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐