Animator动画混合树

2023-11-03

BlendTree介绍

Blend Tree用于多个动画之间的混合,比如走到跑的切换、转弯的切换。

BlendTree

BlendTree创建

双击混合树 (Blend Tree) 以进入混合树图 (Blend Tree Graph);

在这里插入图片描述
混合节点 (Blend Node)的检视器 (Inspector) 中的第一个选项是混合类型 (Blend Type)。此下拉菜单用于选择可以根据一个或两个参数混合的不同混合类型之一。二维混合 (2D Blending) 类型根据两个参数混合子运动。
Blend Type
一维混合 (1D Blending) 根据单个参数混合子运动。
二维简单方向 (2D Simple Directional)
最适用于运动表示不同方向时,如“向前行走”、“向后行走”、“向左行走”和“向右行走”或是“向上瞄准”、“向下瞄准”、“向左瞄准”和“向右瞄准”。可以选择包括位置 (0, 0) 处的单个运动,如“空闲”或“笔直瞄准”。在简单方向 (Simple Directional) 类型中,相同方向上不应存在多个运动,如“向前行走”和“向前奔跑”。
二维任意方向 (2D Freeform Directional)
此混合类型也在运动表示不同方向时使用,但是可以在相同方向上具有多个运动,例如“向前行走”和“向前奔跑”。在任意方向 (Freeform Directional) 类型中,运动集应始终包括位置 (0, 0) 处的单个运动,如“空闲”。
二维任意笛卡尔 (2D Freeform Cartesian)
最适用于运动不表示不同方向时。使用任意笛卡尔 (Freeform Cartesian) 时,X 参数和 Y 参数可以表示不同概念,如角速度和线速度。示例包括“向前行走而不转弯”、“向前奔跑而不转弯”、“向前行走并右转”、“向前奔跑并右转”等运动。

一维混合 (1D Blending)

右击我们的混合树添加3个Motion,
在这里插入图片描述
同时我们设定好3个方向的跑动动画:
在这里插入图片描述我们还需要设定一个名为Direction的Float类型的参数来控制这个混合树:
在这里插入图片描述
Parameter:设置动画根据哪个参数进行融合;
Automate Thresholds:是否自动选择参数;
Time Scale
通过动画速度这一列(图标是一个表)可以调节动画的播放速度,比如你想让跑步的动画播放速度变为原来的2倍,可以设置为2。
在这里插入图片描述
**Adjust Time Scale > Homogeneous Speed ** 可以将动画的速度调整对应到参数的最小值和最大值,但是保持动画的初始相对速度。
按钮可以将动画的播放速度调整到动画列表中所有动画速度的平均值。
Mirroring 镜像
在这里插入图片描述
上面复选框可以左右镜像一个humanoid类型的动画Clip。这个功能可以使用同一个动画创建出来两个方向的动画,可以节省一倍的存储空间和内存。
比如一个向左走的动画,通过镜像可以创建出一个向右走的动画。

代码控制移动转向:

using UnityEngine;
public class TestBlendTree : MonoBehaviour
{
    public float DirectionDampTime = 30.0f;//动画之间的最大差值
    private Animator _animator;
    void Start()
    {
        _animator = this.GetComponent<Animator>();
    }
    void Update()
    {
        if (Input.GetKeyDown(KeyCode.W))
            _animator.SetBool("run", true);
        if (Input.GetKeyUp(KeyCode.W))
            _animator.SetBool("run", false);
        AnimatorStateInfo state = _animator.GetCurrentAnimatorStateInfo(0);
        //奔跑状态下才允许转弯
        if (state.shortNameHash == Animator.StringToHash("Run"))
        {
            //指定人物转弯通过控制混合数的参数即可
            float h = Input.GetAxis("Horizontal") * 130.0f;
            //DirectionDampTime 指示了每秒可以到达的最大值
            //deltaTime 表示当前帧的时间
            _animator.SetFloat("Direction", h, DirectionDampTime, Time.deltaTime);
        }
        else
            //重置一下参数
            _animator.SetFloat("Direction", 0);

    }
}

二维混合树

2D Simple Directional(2D简单方向):当你的运动代表不同的方向,如“向前走”,“向后走”,“向左走”,“向右走”,或“向上瞄准”,“向下瞄准”,“左瞄“和”右瞄“。当然了,可以在(0,0)处包含一个默认动作类似“空闲站立”或“直线瞄准”。与1D混合树不同的是,2D Simple Directional不是在同一个方向上的多个动作,比如“走”和“跑”。

2D Freeform Directional(2D自由方向):动画运用有不同的方向时,也可以使用这种混合类型:可以在同一个方向上有多个运动,例如“走”和“跑”。在Freeform Directional类型中,(0,0)位置必须包含一个默认动作,如“空闲站立”。

2D Freeform Cartesian(2D自由笛卡儿):当混合的2个参数不代表不同的方向时使用。使用Freeform Cartesian,参数X和Y可以表示不同的概念类型,例如角速度和线速度。举个例子:“向前走不转向”,“向前跑不转向”,“向前走并右转”,“向前跑并右转”等动作。

新建两个参数:SpeedZ和SpeedRotate,一个控制直线移动,一个控制转弯。
在这里插入图片描述
我们使用2D Freeform Directional
设置X Position From—Augular Speed(Deg角度)
设置Y Position From—VelocityZ(Z轴速度)
在这里插入图片描述

    private int speedZID = Animator.StringToHash("SpeedZ");
    private int speedRotateID = Animator.StringToHash("SpeedRotate");
    private float speedMax = 4.1f;
    private float speedRotateMax = 126.1f;
    private float dampTime = 0.2f;
    private Animator anim;
   
    void Start()
    {
        anim = gameObject.GetComponent<Animator>();
    }

    void Update()
    {
        anim.SetFloat(speedZID, Input.GetAxis("Vertical")*speedMax);
        anim.SetFloat(speedRotateID, Input.GetAxis("Horizontal")*speedRotateMax,dampTime,Time.deltaTime);
    }
	//SetFloat的另一种重载方式
    //第3个参数表示完成变化所需要的时间,可以给一个比较小的值,相当于自带了一个插值运算Lerp,是动画更加平滑
    //第4个参数表示执行该方法的时间间隔,我们的动画是每帧都在运动,所以设置为Time.deltaTime

每个混合树的动画有一些要注意的地方

动画长度需要一致
动画的起始姿势需要一致
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Animator动画混合树 的相关文章

  • getopt和getopt_long函数

    平时在写程序时常常需要对命令行参数进行处理 当命令行参数个数较多时 如果按照顺序一个一个定义参数含义很容易造成混乱 而且如果程序只按顺序处理参数的话 一些 可选参数 的功能将很难实现 在Linux中 我们可以使用getopt getopt
  • python:二叉树的递归遍历之前序遍历文字详解(基于力扣)

    目录 前言 二叉树 前序遍历 前言 这篇作为自己 理解二叉树递归 的记录 非常适合和我一样的新手朋友 二叉树 关于二叉树 我总结了下面几点 1 二叉树和链表相似 这里只说单链表 链表有一个指针 指向下一个节点 2 二叉树的每一个节点有两个指
  • C++ 监听进程结束

    include
  • linux Redhat Nginx 离线安装

    目标机器没有网络 只能下载各种Nginx依赖库 手动离线安装了 下载所需要的依赖环境和库 链接 https pan baidu com s 1u6TCHMTSNJYCWXTfmjRSxA 提取码 nikc 解压后传到Linux系统的 usr
  • 矩阵的旋转

    把矩阵A的行换成相应的列 得到的新矩阵称为A的转置矩阵 大家在 程序设计基础 的上机实验题目和平时的练习中肯定做过一些关于矩阵的题 其中最常见的就是矩阵的转置了 so 今天我们就不考矩阵的转置了 我们要考察一下矩阵的旋转 Input 输入包
  • C语言实现strlen的三种方法

    目录 1 strlen介绍 strlen 求字符串长度 2 如何使用strlen库函数 3 三种方法实现strlen 计数器法 递归法 指针 指针法 4 关于strlen返回值 1 strlen介绍 strlen 求字符串长度 size t
  • Mac AndroidStudio“GradleBuildRunning”特别慢的解决方法

    在mac上每次运行app特别慢 setting gradle下面也没有离线模式 原来在gradle的侧边栏中
  • idea使用service注解后,编译运行报错 找不到符号 类 service

    使用service注解后找不到服务类 jar包也存在
  • vue和java的前后端请求

    GetMapping value url produces MediaType APPLICATION JSON VALUE public ResponseEntity
  • Forever Winter

    Forever Winter 题意 给一个像下面这样的图 要求第一圈分支和第二圈分支 下图的第一圈分支为5 第二圈分支为3 思路 求每个点的度 最内圈的分支的度是唯一的 找到即可 设为x 然后第二圈的分支为 n 1 x x n为总共节点上
  • 量化演示代码

    import numpy as np import copy def KL P Q out np sum P np log P Q return out def maxq value dynamic range np abs value m
  • C++一行输入多个数字(利用cin和空格)

    使用的方法颇为简单 利用了cin遇到空格就中断的特点 仅含有输入以及输出 欢迎大家一起交流 include
  • unity3d运行后自动暂停_在Unity中使用暂停的小技巧

    很多人在游戏中写暂停脚本的时候 经常会想到 Time timeScale 0 这种方法 但是 Time timeScale 只是能暂停部分东西 如果在 update 函数中持续改变一个物体的位置 这种位置改变貌似是不会受到暂停影响的 比如
  • 科学与AI之间的联系,许多AI的先驱科学家也是脑科学家

    从人工智能 artificial intelligence AI 发展的历史来看 我们可以清楚地看到脑科学与AI之间的联系 许多AI的先驱科学家也是脑科学家 使用显微镜发现的生物大脑的神经连接启发了人们对人工神经网络的研究 使用电子探测器发
  • 杭电OJ-ACM2036(改革春风吹满地)

    题目分析 原题给出的条件是通过多组数据的各个坐标 用逆时针表达 求出对应的 任意 多边形的面积大小 法一 Time Limit Exceeded Java版 主要思路 对一个多边形进行拆解 若含有n条边 记其坐标分别为 X0 Y0 X1 Y
  • 单相半桥逆变器仿真技巧

    1 拓扑与控制 单相半桥逆变器拓扑如下 电压环和电流环控制图如下 调制方式如下 2 仿真步骤 单相半桥逆变器的仿真应该遵循以下步骤 1 选择合适的滤波电感和滤波电容 一般是mH级别 2 选择合适的调制度 注意由于半桥电容电压波动过大 往往不
  • NFS挂载失败: bad option; for several filesystems (e.g. nfs, cifs) you might need a /sbin/mount.

    更新镜像前是可以挂载的 使用SD卡更新成最新的debian系统镜像后就出现下面错误 mount home debian nfs rootfs bad option for several filesystems e g nfs cifs y
  • 下载bilibli网站视频

    https www videofk com bilibili video download bilibili https www videofk com bilibili video download search url https 3A
  • 第十届蓝桥杯 b组

    试题 A 组队 本题总分 5 分 作为篮球队教练 你需要从以下名单中选出 1 号位至 5 号位各一名球员 组成球队的首发阵容 每位球员担任 1 号位至 5 号位时的评分如下表所示 请你计算首发阵容 1 号位至 5 号位的评分之和最大可能是多
  • 【Python】Python 3.11 无法安装 Pytorch ,提示找不到包

    问题 Python 3 11 无法安装 Pytorch 在 pytorch 界面找到语句 cmd 中输入 pip3 install torch torchvision torchaudio extra index url https dow

随机推荐

  • Django显示html网页中静态图片

    Django中显示html网页中静态图片 新建static文件夹 images文件夹 静态图片 检查setting py INSTALLED APPS列表中是否有django contrib staticfiles DEBUG 值是否为Tr
  • Spring事务注解实现的原理

    Spring事务注解是个典型的Spring AOP的注解 方法上面加上 Transactional 方法就有了事务的能力 面试中 基于动态代理讲更多的东西 为什么呢 gt 其实里面核心也是动态代理 在一个使用了ProfitDetailSer
  • c语言printf,scanf的各种用法及易错点

    scanf详解 声明 int scanf const char format argument 返回值 Return Value Both scanf and wscanf return the number of fields succe
  • 机器学习(五)

    一 数据降维 一 特征选择 特征选择是去除一些与预测结果没有关系或者两个特征有高度关联的特征作为机器学习接下来训练集 这里举个例子 预测狗的品种 这里有毛的颜色 有没有牙齿 眼睛颜色 显然有没有牙齿这一特征与预测结果没有关系 这里则需要将这
  • Nerf(Representing Scenes as Neural Radiance Fields for View Synthesis)代码复现笔记

    前言 本文旨在帮助小白快速了解or学习复现出Nerf的代码 整体结构保持不变 不过会针对部分细节为了更好理解进行了修改 本文会相应更新讲解视频于B站 id 出门吃三碗饭 有问题到b站评论区留言 同步更新于 公众号 AI知识物语 B站讲解视频
  • numpy笔记

    文章目录 1 创建numpy变量 2 numpy和list进行转换 3 创建全0全1的numpy对象 4 统计学应用 1 求和 2 均值 3 标准差 4 均方差 5 数据处理 1 数据查找 2 数据排序 3 获取不重复的元素 4 取最大最小
  • 七:以理论结合实践方式梳理前端 React 框架 ——— React 状态管理

    react 状态机制 虽然 react 前面使用通过创建一个 context 上下链接 对象 基于 Provider 供应者 Consumer 消费者 来进行数据的获取 但这种方式局限于只能读取数据 对数据的其他操作还是需要通过 props
  • webbench源码剖析

    Webbench是有名网站压力测试工具 它是由Lionbridge公司开发 http www lionbridge com Webbench能测试处在相同硬件上 不同服务的性能以及不同硬件上同一个服务的运行状况 webbench的标准测试可
  • 【HTML5】登录页面制作简易版

    刚开始学习Java 文件的命名 讲道理应该以英文为主 但是英语又不好 所以只好用拼音 最痛苦的应该算是那些英语又不好 又想秀一下的程序员 一半英语一半拼音 如mainFangFa 你说看了糟心不糟心 目录 1 form表单定义和用法 1 1
  • leetcode解题之200. Number of Islands Java版(岛屿的数量)

    200 Number of Islands Given a 2d grid map of 1 s land and 0 s water count the number of islands An island is surrounded
  • 流的操作

    流 流按照方向分 分为两种输入流和输出流 是以内存作为参照物 当从数据源中 将数据读取到内存中时 叫做输入流 也叫读取流将内存中的数据写入到数据源时 叫做输入流 也叫写入流 流按照传输的内容分 分为 字节流 字符流 对象流 无论是哪一种流
  • python---发送邮件(zmail)

    前言 前面介绍了smtplib的发送邮件方式 今天安静在介绍一种通过zmail来进行发送邮件 但是这个zmail目前只支持python3的版本 那么都在2202年了应该都用python3了吧 zmail zmail目前只支持python3的
  • Arduino esp8266-3.0.1 离线安装

    Arduino esp8266 1 arduino添加开发板 arduino左上角菜单 文件 gt 首选项 出来的设置窗口可以看到 附加开发板管理器网址 添加以下两个网址进去 https arduino esp8266 com stable
  • 栈(Stack)——(二)链式存储实现

    之前的头插法天然满足先进后出 后进先出这个特点 所以我们可以使用链表 设计时选择表头 作为栈顶指针 而不是表尾 单向链表 不含头节点 不同于线式存储 所以不需要作判满操作 链式存储实现代码如下 因为有bool变量 用了C 实现 mystac
  • Amos实操教程

    Amos实操教程 中介效应检验 1 相关概念 2 主界面及功能 3 中介效应 4 中介效应检验步骤 1 相关概念 Amos是什么 Amos的全名是Analysis of Moment Structures 由James L Arbuckle
  • 国密算法概述、及算法的集成应用(sm2、sm3、sm4)

    国密算法概述 及算法的集成应用 sm2 sm3 sm4 一 概述 二 分类概述 3 1 SM1对称密码 3 2 SM2椭圆曲线公钥密码算法 3 3 SM3杂凑算法 3 4 SM4对称算法 3 5 SM7对称密码 3 6 SM9标识密码算法
  • 【满分】【华为OD机试真题2023 JAVA&JS】最优资源分配

    华为OD机试真题 2023年度机试题库全覆盖 刷题指南点这里 最优资源分配 知识点数组贪心 时间限制 1s 空间限制 32MB 限定语言 不限 题目描述 某块业务芯片最小容量单位为1 25G 总容量为M 1 25G 对该芯片资源编号为1 2
  • win10 VS code 编译运行 C/C++的方法

    win10 VS code 编译运行 C C 的方法 具体配置过程如下链接 https zhuanlan zhihu com p 35178331 但中间出了点问题 CTRL ALT n 运行后 PS D C gt cd d C if gc
  • R语言apply()函数

    apply 函数是一种很强大的机制 apply 可把函数应用到数组的某个维度上 其函数的的一般格式为 apply x MARGIN FUN 其中 x为数据对象 MARGIN是维度的下标 FUN是由你指定的函 数 而 则包括了任何想传递给FU
  • Animator动画混合树

    Unity中的BlendTree BlendTree介绍 BlendTree BlendTree创建 一维混合 1D Blending 二维混合树 每个混合树的动画有一些要注意的地方 BlendTree介绍 Blend Tree用于多个动画