Unity中AnimatorController的配置

2023-11-17

AnimatorController(动画控制器)的配置编辑是在Unity的Animator视图中完成的,通过在Animator视图中创建动画状态,以及设置过渡条件,构建动画状态机,以可视化地控制动画的播放。
下面介绍一些配置动画控制器的要点,主要是个人总结的一些心得。

动画状态机行为

状态机行为可以附加在动画状态(AnimationState)或者子状态机上,可以在状态进入、退出等时机执行指定代码。
在想要添加行为的动画状态的属性面板上点击“Add Behaviour”按钮,或者把预先写好的行为脚本拖拽到面板上。操作方法类似MonoBehaviour脚本。在这里插入图片描述
一个状态机行为脚本应当写有一个继承自StateMachineBehaviour类的类。
查阅官方API文档可知StateMachineBehaviour类有一些特定时机的回调方法,列举一些常用的回调方法及调用时机:

  • OnStateMachineEnter:整个状态机进入时
  • OnStateMachineExit:整个状态机退出时
  • OnStateEnter:状态进入时(第一帧)
  • OnStateExit:状态退出时(最后一帧)
  • OnStateUpdate:处于此状态时的每一帧(除第一帧和最后一帧)

可重写这些方法,以在特定时机执行指定代码。

public override void OnStateEnter(Animator animator, AnimatorStateInfo stateInfo, int layerIndex)
{
	//dosomething
}

在方法的参数中可以获取一些上下文和动画状态的数据:

  • Animator animator:当前状态所属的Animator组件的引用。
  • AnimatorStateInfo stateInfo:当前动画状态信息。
  • int layerIndex:当前状态所属的动画层索引值。

OnStateMachineEnter和OnStateMachineExit在状态机进入和退出时调用,但子状态机的进入和退出并不会调用此方法。

若在子状态机上挂载行为脚本,那么子状态中每一个状态都将在相应的时机调用子状态机上行为相应的回调方法。例如,在子状态机M上挂载行为脚本,重写OnStateEnter方法。状态A时子状态机中一个状态。当进入状态A时,也会调用子状态机M上的OnStateEnter方法。

过渡条件

过渡条件表示从状态A(下文称之为初始状态)过渡到状态B(下文称之为目标状态)时需满足的条件。
过渡条件
过渡,个人理解是:初始状态和目标状态的动画各取一定比例混合,混合比例在时间上线性变化。如下图所示:
混合比例在时间上线性变化
蓝色色块覆盖的区域是动画在时间轴上播放实际表现情况。开始时,蓝色色块覆盖了Run的第一个灰色色块,表示过渡开始之前播放的都是Run的动画;而播放到过渡开始时,下方开始有Tumble色块,而蓝色色块也从Run色块开始斜向下走向Tumble色块,表示过渡从这开始,动画开始逐渐混入Tumble的部分;然后蓝色色块又变水平向,这时过渡已经结束,播放的完全是Tumble的动画。

Has Exit Time

初始状态转换到目标状态的过渡开始需满足特定的条件(下文称之为条件A),条件A由“Exit Time”参数决定。而此参数表示是否启用条件A对过渡发生的限制。

Exit Time

退出时间。这个参数可以和“Has Exit Time”配合使用,是条件A的组成部分。
这个参数是一个标准化时间(英文是normalized time,不知道这个直译准不准),取值介于0到1,其表示的时间长度为初始状态播放长度乘以其数值。例如初始状态的动画剪辑的播放时长是1秒,“Exit Time”取值0.5,表示的时长就是1*0.5(秒)=0.5(秒)。也可以理解为初始状态的播放时长的百分比。后面提到的标准化时间的原理和此处一致。
上文提到的条件A的具体定义:初始状态已播放的长度百分比大于“Exit Time”所表示的百分比。
所以,若勾选了“Has Exit Time”,那么需当初始状态已播放的长度百分比大于“Exit Time”所表示的百分比时,才开始过渡。
例如,勾选了“Has Exit Time”,“Exit Time”设置为0.75,那么初始状态播放完75%才能开始过渡。(若触发条件在75%之后,那直接开始过渡)

Transition Duration

过渡持续的时长。此参数只是表示时长的数值,通俗地讲就是不带单位的。单位由“Fixed Duration”决定,可能是秒或者“%”。

Fixed Duration

表示“Transition Duration”参数单位,配合其表示过渡持续的时长。勾选后表示“Transition Duration”的单位是秒,不勾选表示“Fixed Duration”是标准化时间,是初始状态时长的百分比(下文表述为初始状态的标准化时间)。例如,“Transition Duration”取0.5,勾选“Fixed Duration”,表示过渡持续的时长为0.5秒;不勾选,时长是初始状态时长的50%。

Transition Offset

目标状态的过渡偏移。 表示过渡开始时,目标状态从哪里开始参与过渡,是目标状态的标准化时间。

Interruption Source

打断来源(个人直译)。过渡的过程中是可以由某些其他过渡的触发而打断的,此参数指定过渡打断的方式。(具体参见我的另一个篇文章)

上述的参数在图中表示的位置如下:
参数在图中表示的位置
“Exit Time”决定过渡开始在初始状态上的百分比,“Transition Offset”决定过渡结束在目标状态上的百分比。
而“Transition Duration”决定过渡的时长。

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

Unity中AnimatorController的配置 的相关文章

  • Unity 资源加载卸载过程

    什么时候才是UnusedAssets 看一个例子 Object obj Resources Load MyPrefab GameObject instance Instantiate obj as GameObject Destroy in
  • using UnityEditor引用注意事项

    本文转载自http blog csdn net czlilove article details 19979725 在运行时脚本中使用UnityEditor命名空间 假如该脚本被挂在场景中的物体上 那么 可以这样做 在Unity编辑器中运行
  • Unity WebGL错误集锦

    ips 0 Unity的PlayerSettings的otherSettings或者Publish Settings里面的Enable Exceptions里面选择Full StackTrace 可以在打出的包中的浏览器的webgl打印出错
  • Unity中loading页加载的实现

    首先创建一个Global cs 使用单例用于存储场景的名字 便于后续脚本的调用 此脚本不必挂载在游戏物体上 using UnityEngine using System Collections public class Global Mon
  • 【Unity&C#&随机数】随机数

    一个简单的随机数获得 0或1 使用了这样的代码 想要获得0或者1 if Input anyKeyDown float i 1 if i 1 i Random Range 0 Rang i i lt 0 5 0 1 Debug Log Cou
  • unity制作一个可以自由滑动收缩的历史记录功能。

    公司在做一款模拟经营类的卖车游戏 需要一个简单的历史记录功能 放在左上角 记录最近20条的收入 支出记录 超过2秒不动则收起 收起时展示最近的一个消息记录 用到的组件是ScrollView 使用方法可以参考我写过的一篇博客 ScrollVi
  • Unity 分块延迟渲染01 (TBDR)

    现代移动端图形体系结构的概述 现代SoC通常会同时集成CPU和GPU CPU被用于处理需要低内存延迟的序列 大量分支的数据集 其晶体管用于流控制和数据缓存 GPU为处理大型 未分支的数据集 如3D渲染 晶体管专用于寄存器和算术逻辑单元 而不
  • Unity 粒子特效、材质发光 HDR ShaderGraph图文教程[完成lit发光设置]

    效果如图 准备工作 在hdr模式下 关闭Directional Light 相机设置 移动球挂一个点光源作为子节点 设置自行调节 0 创建移动球的材质及shader shader gt 在Project Create Shader Grap
  • Unity动画系统详解

    目录 动画编辑器 编辑器面板 动画复用 前言 人形重定向动画 Humanoid 通用动画 Generic 旧版本动画 Legacy 动画控制器 系统状态 切换条件 状态机脚本 IK动画 反向动力学 BlendTree 混合树 Animato
  • Unity中实现倒计时的几种方式

    1 Time time using UnityEngine public class TimeTest MonoBehaviour public float secound 10 void Update Timing private flo
  • Unity中UI框架的使用1-添加面板、显示Loading页面

    其中BasePanel和Canvas都是挂在面板的预制物上的 1 导入我们的UI框架 本篇文章中有用的是两个UIPanelType NUIManager和NBasePanel 会放在文章最后供大家使用 2 先将我们做好的Panel设置成预制
  • 【IMGUI】 各种辅助类 EditorGUIUtility、EditorUtility、GUIUtility、GUILayoutUtility

    EditorGUIUtility class in Editor 继承自 GUIUtility EditorGUI 的各种辅助程序 EditorGUIUtility currentViewWidth 我尝试打印了下这个值和position
  • unity3d切换场景Application.LoadLevel(1)含义

    Application LoadLevel 1 场景ID
  • mixamo根动画导入UE5问题:滑铲

    最近想做一个跑酷游戏 从mixamo下载滑铲动作后 出了很多动画的问题 花了两周时间 终于是把所有的问题基本上都解决了 常见问题 1 动画序列 人物不移动 2 动画序列 人物移动朝向错误 3 蒙太奇 人物移动后会被拉回 4 蒙太奇 动画移动
  • 【Unity】运行时创建曲线(贝塞尔的运用)

    Unity 运行时创建线 贝塞尔的运用 1 实现的目标 在运行状态下创建一条可以使用贝塞尔方法实时编辑的网格曲线 2 原理介绍 2 1 曲线的创建 unity建立网格曲线可以参考 Unity程序化网格体 的实现方法 主要分为顶点 三角面 U
  • Unity学习笔记

    一 旋转欧拉角 四元数 Vector3 rotate new Vector3 0 30 0 Quaternion quaternion Quaternion identity quaternion Quaternion Euler rota
  • 从three.js旋转动画,我了解了requestAnimationFrame

    前言 大家好 我是南木元元 热衷分享有趣实用的文章 希望大家多多支持 一起进步 个人主页 南木元元
  • U3D游戏开发中摇杆的制作(NGUI版)

    在PC端模拟摇杆 实现控制摇杆让玩家或者物体移动 以下是完整代码 using System Collections using System Collections Generic using UnityEngine public clas
  • 游戏开发创建操作之玩家信息系统的建立

    游戏一般都需要玩家信息系统 那么我们应该如何搭建玩家信息系统 接下来我将展示一种简单的方法 完整代码如下 using System Collections using System Collections Generic using Uni
  • 游戏开发之常见操作梳理——武器装备商店系统(NGUI版)

    游戏开发中经常出现武器商店 接下来为你们带来武器装备商店系统的具体解决办法 后续出UGUI Json版本 敬请期待 武器道具的具体逻辑 using System Collections using System Collections Ge

随机推荐

  • C++17新特性之try_emplace与insert_or_assign

    由于std map中 元素的key是唯一的 我们经常遇到这样的场景 向map中插入元素时 先检测map指定的key是否存在 不存在时才做插入操作 如果存在 直接取出来使用 或者key不存在时 做插入操作 存在时做更新操作 通用的做法 可以直
  • Sqoop脚本调用

    在生产环境中 肯定不能直接去跑命令 需要使用脚本文件 然后定时执行脚本文件即可 cd usr hdk mkdir job cd job vi RDBMS2HDFS opt import connect jdbc mysql hadoop01
  • blender基础入门 / 操作快捷键

    鼠标停留在工具按钮上 按F1 打开官网在线帮助 基本显示 操作框放大缩小 T 显示 隐藏左侧工具栏 基本信息侧边栏Sidebar 展开 弹出 快捷键N 模型比例1 1 保持自身比例数据 模型游标轴点中心点设置位置 游标模式 shift C游
  • Apache下 FastCGI 配置小结

    http hi baidu com clusterlee item aa9a122c84cf94d40e37f985 一 下载 FastCGI模块 http www fastcgi com dist mod fastcgi 2 4 6 ta
  • 知识蒸馏综述:代码整理

    GiantPandaCV导语 收集自RepDistiller中的蒸馏方法 尽可能简单解释蒸馏用到的策略 并提供了实现源码 1 KD Knowledge Distillation 全称 Distilling the Knowledge in
  • 简单使用easyExcel实现对excel读和写操作

    1 引入依赖 easyexcel底层封装了poi所以必须引入poi而且版本需要进行对应如下
  • Python报错:requests.exceptions.SSLError: HTTPSConnectionPool(host=‘huggingface.co‘, port=443): Max ret

    1 Python报错 2 解决方法 出现问题的原因是运行程序的时候没有联网 但是使用了未下载的bert base chinese模型 我们可以将模型手动下载 然后放入到对应文件夹即可 3 下载bert base chinese模型 首先进入
  • java 字符串包含_java判断字符串包含某个字符的实例方法

    java判断字符串是否包含某个字符的方法 一 contains方法 1 描述 java lang String contains 方法返回true 当且仅当此字符串包含指定的char值序列 2 声明 public boolean conta
  • uc浏览器显示服务器错误,使用UC浏览器打开网页报错,无法播放优酷官网视频...

    适用产品 HUAWEI MateBook 13 2021款intel i7 8g 512g 集显 触屏 2020 锐龙版 amd r5 16g 512g 集显 锐龙版2020款 amd r5 8g 512g 集显 触屏 2021款 inte
  • 机器学习学习笔记——数据集划分(留出法)

    编译工具 pycharm 学习工具 Anaconda notebook 在机器学习算法中 我们通常将原始数据集划分为三个部分 划分要尽可能保持数据分布的一致性 1 Training set 训练集 训练模型 2 Validation set
  • 使用shell(sh)文件批量修改文件的权限

    最近在www coolketang com上实现了苹果移动端互动教程的Web化 但是课程资料在上传到云服务器时 总是出现权限问题 而无法打开 所以写了个脚本 在上传服务器之前 批量修改资源的权限 代码较少 可以直接阅读 编辑完保存为 sh文
  • 最强自动化测试框架Playwright (27)-跟踪查看器

    Playwright Trace Viewer 是一个 GUI 工具 可帮助您在脚本运行后探索记录的 Playwright 跟踪 可以本地打开 也可以在trace playwright dev 打开 录制跟踪文件 使用context tra
  • 在物联网中应用机器学习

    欢迎大家前往腾讯云 社区 获取更多腾讯海量技术实践干货哦 本文由未来守护者发表于云 社区专栏 本项目探讨如何将机器学习 Machine learning 应用到物联网 IoT Internet of Things 中 我们将使用 Andro
  • 关于数据分析流程详解

    在数据分析过程中 主要是以下几个过程 一 明确分析目的 首先要明确自己的分析目的 只有明确目的的分析才能更有效的解决自己的问题 打到自己的目的 大量数据 试探性的分析除外 但是即使是试探性的分析过程 前期也是需要一个假设的分析目的的 二 数
  • split()正则表达式按照长度切割

    String split s s length 2 gt 0 split lt G 2 正则表达式匹配 按2位长度分割
  • 期货止损篇1:固定点数止损真的好用,只是90%的人都用错了

    最近问到止损的朋友比较多 这个系列跟大家分享下个人对于止损的一些看法 每个人刚入市的时候 最常听到的就是固定点数止损 比如固定3个点止损 固定10个点止损 固定20个点止损 固定50个点止损 用久了 很多人就抱怨这个方法不靠谱 大师是不是留
  • Keil报错 requires ANSI-style prototype

    在进行模块化程序设计时遇到这种error 这是头文件没有定义的问题 首先在同一个目录下建立一个 h文件 第二步打开文件 进行编辑 要用到 ifndef define endif 这是为了避免重复定义 ifndef后面跟的是头文件名称的大写
  • matlab 浅浅实现随机森林(Random forest)算法对高光谱图像数据进行分类,输出分类结果图和精度评价

    利用随机森林 Random forest 算法对数据进行分类 输出分类结果图 利用验证样本集计算出分类结果的混淆矩阵 输出分类结果的整体分类精度 和每一类地 物的分类精度 emmm不要对下面的内容报有太大的期待 要求使用随机森林算法 我尝试
  • UE4如何上传文件

    上传文件示例代码 InUrl为上传URL InFiles为本地文件路径的数组 Boundary为分隔符 用来分隔文件 其他地方不能出现该字符串 每个文件都以 r n Boundary r n 开始 即BeginBoundry 分隔符之后是文
  • Unity中AnimatorController的配置

    AnimatorController 动画控制器 的配置编辑是在Unity的Animator视图中完成的 通过在Animator视图中创建动画状态 以及设置过渡条件 构建动画状态机 以可视化地控制动画的播放 下面介绍一些配置动画控制器的要点