Unity之【使用Blend-Tree】

2023-05-16

Blended-Tree

  • 材料准备
  • 创建Animator
  • 创建Controller
  • 配置混合树
  • 脚本代码
  • 效果演示

材料准备

  1. 人物模型和动画

    直接去Unity素材库里找,动画可以找可以自己录制

  2. Unity编辑器

创建Animator

  1. 步骤

    Inspector -> Add Component -> Animator
    Animator

  2. 主要包含Controller和Avatar

    Controller 是动画控制器,接下去着重讲解
    Avatar控制人物的关节等,这里可以为空,想了解可以看官方文档

创建Controller

  1. 新建Animator Controller

    点击鼠标右键,Create-> Animator Controller在这里插入图片描述

  2. 将创建出来的Animator Controller拖动到Animator的Controller框框中
  3. 打开创建出来的 Animator Controller

    刚开始只有箭头所示的三个状态,另外两个是自己加的
    在这里插入图片描述

  4. 点击左上角导航栏的Parameters,添加三个float参数

    在这里插入图片描述

  5. 在Base Layer界面中添加两个State:Idle和Run
    (其中Idle不需要混合树,设置为Empty,Run需要混合,设置成From New Blend Tree)

    在这里插入图片描述

  6. 设置状态转换

    这里不细讲了,不懂就去翻文档把
    简言之,就是Idle和Run的互相转换条件
    (1)Idle - > Run的条件:
    在这里插入图片描述
    (2)Run -> Idle的条件:
    在这里插入图片描述

配置混合树

  1. 双击刚刚创建的混合树Run
  2. 点击Blend Tree,选择Blend Type 为 2D Simple Directional ,Parameters两个参数指定为Horizontal 和 Vertical
  3. 并在右侧Inspector(点+,选择motion),添加要混合的移动动画

    (我这里是前后左右移动)在这里插入图片描述

  4. 点击图中的蓝色方块,调整对应动画到上下左右对称的位置

    如上图所示

  5. 拖动上图的红色圆心,可以在Inspactor下方看到玩家移动混合的效果

    在这里插入图片描述


至此,混合树界面部分创建完成,接下去为人物添加动画,通过键盘控制人物移动,并观看混合效果。


脚本代码

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

/// <summary>
/// 
/// </summary>
public class PlayerMove : MonoBehaviour
{
    public float speed = 3;
    public Animator moveAnimator;

    private void Awake()
    {
        moveAnimator = GetComponent<Animator>();
    }
    private void Update()
    {
        playerMove();
    }

    private void playerMove()
    {
        Vector3 movement = getMovement() * speed * Time.deltaTime;
        float hor = getHorizontal();
        float ver = getVertical();
        moveAnimator.SetFloat("Horizontal", hor);
        moveAnimator.SetFloat("Vertical", ver);
        float moveValue = movement.sqrMagnitude;
        moveAnimator.SetFloat("Movement", moveValue);
        this.transform.position += movement;
    }

    private float getHorizontal()
    {
        float hor = Input.GetAxis("Horizontal");
        return hor;
    }

    private float getVertical()
    {
        float ver = Input.GetAxis("Vertical");
        return ver;
    }

    private Vector3 getMovement()
    {
        float hor = getHorizontal();
        float ver = getVertical();
        Vector3 movement = Vector3.forward * ver + Vector3.right * hor;
        // 做成单位向量,后面使用自定义的speed可以精确控制移动速度
        movement.Normalize();
        return movement;
    }
}

效果演示

  1. 后退 + 左移
    在这里插入图片描述
  2. 右移 + 前进
    在这里插入图片描述
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Unity之【使用Blend-Tree】 的相关文章

  • 如何防止 Ext Js 树中检查更改时的 itemclick 事件

    我在 Ext tree Panel 中添加了两个侦听器 检查更改 和 项目单击 但我注意到 当检查发生更改时 它也会触发项目单击事件 我希望阻止该项目的点击事件 listeners checkchange function node che
  • 当指向结构的双指针是函数的参数时,为什么我们使用“&(*”语句?

    void instert NODE root int value insert root gt left value void search NODE root int value search root gt left value 为什么
  • 静止搜索性能

    这是一个双重问题 我组装了一个简单的国际象棋引擎 它执行 Alpha Beta 搜索 最后执行静止搜索 静止搜索正在影响性能 问题是 这是可以接受的性能影响吗 如果不是 那么应该采取什么措施来解决这个问题 下图给出了性能影响 请注意 这些统
  • C++ 中的动态树

    我想制作一棵树 每个节点都可以有一些子节点 但我不知道它们的数量 树必须在小内存中使用 无额外数据 以每个节点的恒定时间进行编码 我认为我将创建具有值和子属性 值是 int 子属性是堆栈 的类 Tree 以及指向该树中每个节点的指针数组 我
  • sparql 主题的完整树

    例如 当我有一个人图时 例如约翰和约翰有工作地址 家庭地址 电话号码 关系等 是否有可能在不知道它是什么的情况下检索与 john 及其子类相关的所有内容 这样我就可以检索例如以下内容 John lt address lt house num
  • 从物化路径构建 JSON 树

    我计划在 MongoDB 中使用物化路径来表示树 并且需要将物化路径转换回 JSON 树 前任 物化路径 var input id 0 path javascript id 1 path javascript database id 2 p
  • C# 解析宽松的 json 来制作一棵树

    所以我需要解析类似这样的文件 pl GENERIC BACK COFNIJ WAIT CZEKAJ PAGES ABOUTME ID ID INFO STATUS STATUS TOP MENU LOGGED Zalogowany OPTI
  • 二叉树的列表实现是否可扩展?

    我正在写一个简单的编解码器 该树将被预先计算 一旦构建就不会发生任何变化 它只会被搜索 平衡二叉树的所有叶节点都是信号值 内部节点是近似压缩表示 如果我有很大的叶节点值 使用 stl 矢量的列表实现是否可扩展 目前我不知道有多大 列出实现
  • 如何在 Clojure 中遍历一棵树,同时收集每个节点节点的值?

    我想创建一个函数来收集二叉树中每个节点的值 在 ClojureDocs 中 我发现了几个用于遍历树 图的函数 例如 tree seq prewalk 和 postwalk https clojuredocs org clojure core
  • 二叉搜索树是平衡的吗?

    这已经讨论过了here https stackoverflow com questions 742844 how to determine if binary tree is balanced 但我在下面有一个实现 线程中从未讨论过 pub
  • 单击父节点时检查树的子节点 [ExtJS]

    我想知道如何在单击 ExtJs 中的特定节点时检查树的同级节点 我已经给了每个节点的 id 我可以访问单击的节点的 id 那么我如何继续自动检查子节点 有人请帮助我 or any other way of getting hands on
  • Beaglebone Black 上的 GPIO

    我目前遇到了 Beaglebone black GPIO 引脚的问题 我正在寻找一种正确的方法来读取 C 中的 GPIO 引脚 p8 4 的值 如果我理解正确的话 我尝试使用一个库 该库使用了在引入设备树之前不支持的旧方法 我尝试寻找其他解
  • 提取给定节点的所有父节点

    我正在尝试使用以下命令提取每个给定 GO Id 节点 的所有父级EBI RDF sparql 端点 https www ebi ac uk rdf services sparql 我是根据this https stackoverflow c
  • 使用霍夫曼代码压缩文件的步骤

    我知道有很多涉及霍夫曼代码的问题 包括我自己的另一个问题 但我想知道实际编码文本文件的最佳方法是什么 减压看似微不足道 遍历树 在 0 处向左 在 1 处向右 打印字符 但是 如何进行压缩呢 以某种方式将字符的位表示存储在树的节点中 每次遇
  • 如何使用 d3.v4 中的 JSON 数据创建树布局 - 不使用 stratify()

    我正在尝试将一些 d3 代码从 v3 更新到版本 4 我有一个使用 JSON 数据的树形图 d3 v4 示例展示了如何使用 stratify 将表格数据 例如flare csv 转换为分层数据https bl ocks org mbosto
  • 任何人都知道 JQuery 插件可以生成类似于 geni.com 上的树形菜单

    大家好 我花了几个小时寻找一个 Jquery 插件来生成像 geni com 上那样的树形菜单模块 如果有人知道 Jquery 中的这样的插件或脚本 请让我知道或指导我如何使用 Jquery 开发这样的功能 请检查我正在寻找什么http w
  • 从 XML 构建树结构的速度很慢

    我正在将 XML 文档解析为我自己的结构 但对于大型输入来说构建它非常慢 是否有更好的方法来做到这一点 public static DomTree
  • java数据结构模拟数据树

    我需要帮助定义使用什么方法 我有一个 SOAP 响应 给我一个 xml 文件 我需要在屏幕上显示 3 个相关列表 当您在第一个列表中选择一个项目时 相应的选择将出现在第二个列表中 依此类推 我只对从 xml 流中提取数据后如何有效地组织数据
  • O(1) 算法确定节点是否是多路树中另一个节点的后代?

    想象一下下面的树 A B C D E F 我正在寻找一种方法来查询 F 是否是 A 的后代 注意 F 不需要是directA 的后代 在这种特殊情况下这是正确的 只需要针对更大的潜在后代节点池测试有限数量的潜在父节点 当测试一个节点是否是潜
  • 如何创建用于霍夫曼编码和解码的树?

    对于我的作业 我将对霍夫曼树进行编码和解码 我在创建树时遇到问题 并且陷入困境 不要介意打印语句 它们只是让我测试并查看函数运行时的输出是什么 对于第一个 for 循环 我从主块中用于测试的文本文件中获取了所有值和索引 在第二个 for 循

随机推荐

  • 在px4,gazebo环境中添加激光雷达,双目相机和下视摄像头

    在搭建好px4的仿真环境后 xff0c gazebo中仅为一架裸机 xff0c 不含其他传感器 本文将在该环境下把激光雷达 xff0c 双目相机 xff0c 下视摄像头集成到飞机上 xff0c 方便后续的算法测试 修改仿真启动文件 找到 F
  • Oauth2.0的四种模式

    1 授权码模式 xff08 1 xff09 资源拥有者打开客户端 xff0c 客户端要求资源拥有者给予授权 xff0c 它将浏览器被重定向到授权服务器 xff0c 重定向时会 附加客户端的身份信息 如 xff1a uaa oauth aut
  • nvidia-smi报错:NVIDIA-SMI has failed because it couldn‘t communicate with the NVIDIA driver

    输入nvidia smi显示 NVIDIA SMI has failed because it couldn t communicate with the NVIDIA driver 但是torch cuda is available 还能
  • RunnerGo开源版的安装教程(Windows)

    文章目录 一 启动Hyper V服务二 安装docker三 准备 docker 和 docker compose 环境四 cd runnergo 进入到目录五 配置文件 config env 修改 默认基本可以不用改六 修改应用暴露的端口号
  • Docker Desktop requires a newer WSL kernel version.

    问题描述 xff1a Docker Desktop requires a newer WSL kernel version 问题截图 xff1a 问题原因 xff1a WSL不是最新版 解决方案 xff1a 适用于 Linux 的 Wind
  • 傅里叶变换(一)——认识傅里叶变换

    注 xff1a 本文为博主参考书籍和他人文章并加上自己的理解所编 xff0c 作为学习笔记使用并将其分享出去供大家学习 若涉及到引用您的文章内容请评论区告知 xff01 如有错误欢迎指正 xff01 参考文章 xff1a https zhu
  • 解决笔记本装linux后触摸板无法用的问题

    困扰好久 xff0c 好像没多少人遇到类似的问题 xff1f 仅把我的解决办法分享出来提供一个思路 那就是 把内核版本升级到4 17以上 至于更换内核教程 xff0c 参考这里安装和使用新的内核 要比教程里多下载一个 linux modul
  • 快速幂和矩阵快速幂

    快速幂 快速幂是数论中最简单的几种算法之一 xff0c 顾名思义 xff0c 就是快速计算某个数的多少次幂 相较于传统循环pow的计算方法 xff0c 快速幂的复杂度为 O l o g 2
  • ucosii中消息队列、消息邮箱、信号量的区别

    1 用信号量进行行为同步时 xff0c 只能提供同步的时刻信息 xff0c 不能提供内容信息 若被控制方要求得到控制方的内容信息时 xff0c 可以使用消息邮箱或消息队列 2 但由于消息邮箱里只能存放一条消息 xff0c 所以使用消息邮箱进
  • 项目时间管理的几种方法

    随着项目活动分解的深入和细化 xff0c 工作分解结构 WBS 可能会需要修改 xff0c 这也会影响项目的其他部分 例如成本估算 xff0c 在更详尽地考虑了活动后 xff0c 成本可能会有所增加 xff0c 因此完成活动定义后 xff0
  • 【内网学习笔记】25、Exchange 邮件服务器

    1 Exchange 的基本操作 在 Exchange 服务器上的 PowerShell 里进行以下操作 将 Exchange 管理单元添加到当前会话中 add pssnapin microsoft exchange 查看邮件数据库 Get
  • cuda.tensor转为numpy, 以及numpy与tensor互相转换

    1 cuda tensor转为numpy 解决 TypeError can 39 t convert cuda 0 device type tensor to numpy Use Tensor cpu to copy the tensor
  • [软件工程]第三章 结构化方法————(2020.6.11学习笔记)

    目录 1 xff0c 第一节 结构化需求分析 2 xff0c 第二节 结构化设计 第一节 结构化需求分析 需求分析面临的挑战 xff08 1 xff09 问题空间理解 xff08 2 xff09 人与人之间的通信 xff0c 有效沟通 xf
  • ESP8266系列WIFI模块的使用·

    一 概述 ESP8266是由乐鑫公司出品的一款物联网芯片 xff0c 因为价格较低 xff0c 性能稳定等收到很大关注 该芯片可工作于三种种模式下 xff0c 分别是 xff1a AP模式 xff0c station模式以及混合模式 xff
  • idea中使用actiBPM

    在idea中actiBPM插件的支持不是太友好 xff0c 顺便附上插件下载地址 链接 xff1a https pan baidu com s 1cyaDGDXWtJuWys3WVG98qA 提取码 xff1a onuz 因此在这里记录一下
  • 动态规划、贪心算法、分治算法的优缺点分析

    动态规划模型相对于静态规划模型的优点 xff1a 1 能够得到全局最优解 xff1b 2 可以得到一族最优解 xff1b 3 由于动态规划方法反映了动态过程演变的联系和特征 xff0c 在计算时可以利用实际知识和经验提高求解效率 动态规划模
  • 如何在vscode上运行调试C++(最简单的方法)

    Visual Studio Code vscode同样是微软出品的 支持 看上面的vside介绍吧 就省略了 人称宇宙第一编辑器 作为编辑器 它几乎支持所有的语言 对应语言风格的高亮 自动缩进 代码纠错 代码提示和代码补全等 要是有相应的编
  • visual studio中,已经安装完成后如何再安装其他组件(即在安装过程中未勾选的)怎么办?

    方法一 xff1a 控制面板 gt 程序 程序和功能 右键visual studio 单击更改 下面有三个按钮 单击更改 xff0c 把需要安装的组件全钩 xff0c 然后点击更改即可 1 在win10界面左下角搜索 控制面板 2 寻找程序
  • Unity can't be installed on this disk.The contents of this disk can't be changed.

    1 问题 在使用mac下Unity的时候 xff0c 通常情况下我们的方法都是通过Hub的安装按钮下载 但是 xff0c 很多时候上面并没有我们需要的版本 于是我们傻乎乎的通过点击上面的 xff1a 官方发布网站 进行下载 在下载的第五个步
  • Unity之【使用Blend-Tree】

    Blended Tree 材料准备创建Animator创建Controller配置混合树脚本代码效果演示 材料准备 人物模型和动画 直接去Unity素材库里找 xff0c 动画可以找可以自己录制 Unity编辑器 创建Animator 步骤