【Unity-Animator】通过 StateMachineBehaviour 实现回调
StateMachineBehaviour
简介
StateMachineBehaviour是一个基类,所有状态脚本都派生自该类。它可以在状态机进入、退出或更新状态时执行代码,而无需编写自己的逻辑来测试和检测状态的变化。这使得开发者可以更方便地处理状态转换时的逻辑,例如播放音效、改变角色状态等
优点
清晰的状态管理:可以针对每个状态实现独立的逻辑。
灵活扩展:无需修改原有代码,通过 Animator 的状态机即可实现功能。
注意事项
StateMachineBehaviour 脚本是状态的扩展,与具体的动画剪辑分离。
如果多个状态共享同一个 StateMachineBehaviour,需要通过 stateInfo.shortNameHash 或状态名进行区分。
实现回调
创建 StateMachineBehaviour 脚本
右键点击项目视图,选择 Create -> C# Script,命名为 CustomStateBehaviour。
修改脚本内容如下:
using UnityEngine;public class CustomStateBehaviour : StateMachineBehaviour
{// 动画状态进入时调用override public void OnStateEnter(Animator animator, AnimatorStateInfo stateInfo, int layerIndex){Debug.Log($"Entered state: {stateInfo.shortNameHash}");// 触发某个逻辑,例如播放音效animator.GetComponent<YourComponent>()?.PlaySound();}// 动画状态更新时调用override public void OnStateUpdate(Animator animator, AnimatorStateInfo stateInfo, int layerIndex){Debug.Log($"Updating state: {stateInfo.shortNameHash}, Time: {stateInfo.normalizedTime}");}// 动画状态退出时调用override public void OnStateExit(Animator animator, AnimatorStateInfo stateInfo, int layerIndex){Debug.Log($"Exited state: {stateInfo.shortNameHash}");// 停止某些逻辑animator.GetComponent<YourComponent>()?.StopEffect();}
}
将脚本应用到 Animator 状态
打开 Animator Controller。
选择一个动画状态。
在右侧的 Inspector 面板中点击 Add Behaviour 按钮。
选择刚才创建的 CustomStateBehaviour 脚本。
为对象添加组件(可选)
假设 CustomStateBehaviour 中需要访问一个脚本 YourComponent,可以创建如下脚本并挂载到带有 Animator 的对象上:
using UnityEngine;public class YourComponent : MonoBehaviour
{public void PlaySound(){Debug.Log("Playing sound...");// 实现播放音效逻辑}public void StopEffect(){Debug.Log("Stopping effect...");// 实现停止特效逻辑}
}
运行测试
当动画状态进入时,控制台会打印 Entered state。
每帧更新时,打印 Updating state。
动画状态退出时,打印 Exited state。

相关文章:
【Unity-Animator】通过 StateMachineBehaviour 实现回调
StateMachineBehaviour 简介 StateMachineBehaviour是一个基类,所有状态脚本都派生自该类。它可以在状态机进入、退出或更新状态时执行代码,而无需编写自己的逻辑来测试和检测状态的变化。这使得开发者可以更方便地处理状态转换时的逻辑,例…...
鸿蒙中自定义slider实现字体大小变化
ui: import { display, mediaquery, router } from kit.ArkUI import CommonConstants from ./CommonConstants; import PreferencesUtil from ./PreferencesUtil; import StyleConstants from ./StyleConstants;// 字体大小 Entry Component struct FontSize {Sta…...
数据结构与算法之栈: LeetCode 71. 简化路径 (Ts版)
简化路径 https://leetcode.cn/problems/simplify-path/description/ 描述 给你一个字符串 path ,表示指向某一文件或目录的 Unix 风格 绝对路径 (以 ‘/’ 开头),请你将其转化为 更加简洁的规范路径 在 Unix 风格的文件系统中…...
STM32-笔记40-BKP(备份寄存器)
一、什么是BKP(备份寄存器)? 备份寄存器是42个16位的寄存器,可用来存储84个字节的用户应用程序数据。他们处在备份域里,当VDD电源被切断,他们仍然由VBAT维持供电。当系统在待机模式下被唤醒,或…...
NAS中不同RAID级别特点与适用场景
1. RAID 0(条带化) 硬盘数量:至少2块。硬盘要求:硬盘容量可以不同,但总容量以最小硬盘为准(例如:1TB 2TB 2TB,其中1TB会被浪费)。优点: 读写性能显著提升&…...
node.js的进程保活
nodejs的进程保活其实用PM2应该更好用些,不过由于原理其实并不复杂,我们可以自己手写一个服务来干这个工作。 假设我们有一个服务,可以这样来定义下它的相关信息: const svcs[ {"sid":"apl","name"…...
meta name=“viewport“ content=“width=device-width, initial-scale=1.0“
meta name“viewport” content“widthdevice-width, initial-scale1.0” 这段代码在网页设计中扮演着非常重要的角色,尤其是在响应式设计中。下面是对这段代码的详细解释及其在响应式设计中的作用: 1. 代码含义 html Copy Code meta 标签是 HTML 中用…...
【vue3】 defineExpose 的使用
以下是 Vue3 中defineExpose的使用方法: 基本概念 defineExpose是 Vue3 中的一个工具函数,是仅能在<script setup>中使用的函数,用于显式暴露组件内部的属性或方法给父组件使用2。在 Vue3 的<script setup>中,组件的…...
思维转换:突破思维桎梏,创造更高效的工作与生活
在现代职场和生活中,我们经常面临着各种挑战和问题,有时候虽然付出了很多努力,但依然难以找到更有效的解决方案。这时,或许我们需要的不是更多的努力,而是一次“思维转换”。这一概念看似简单,但它背后却蕴…...
OpenCV相机标定与3D重建(55)通用解决 PnP 问题函数solvePnPGeneric()的使用
操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C11 算法描述 根据3D-2D点对应关系找到物体的姿态。 cv::solvePnPGeneric 是 OpenCV 中一个更为通用的函数,用于解决 PnP 问题。它能够返回多个可能…...
vue3学习日记5 - 项目起步
最近发现职场前端用的框架大多为vue,所以最近也跟着黑马程序员vue3的课程进行学习,以下是我的学习记录 视频网址: Day2-11.项目起步-静态资源引入和ErrorLen安装_哔哩哔哩_bilibili 学习日记: vue3学习日记1 - 环境搭建-CSDN博…...
java导出pdf文件
java导出pdf,前端下载 1、制作pdf模板2、获取pdf导出中文需要的文件3、实现4、前端发起请求并生成下载链接 使用注意点 因为原来制作的pdf表单内容过于复杂,下面代码只包含前两行的操作。 本次操作需要前端向后端发起请求,后端返回数据给前端…...
【MySQL学习笔记】MySQL视图View
视图View 1、视图的基础语法2、检查选项3、视图的更新4、视图的作用 视图(View)是一种虚拟存在的表。视图中的数据并不在数据库中实际存在,行和列数据来自定义视图的查询中使用的表,并且是在使用视图时动态生成的。 通俗的讲&…...
从玩具到工业控制--51单片机的跨界传奇【2】
咱们在上一篇博客里面讲解了什么是单片机《单片机入门》,让大家对单片机有了初步的了解。我们今天继续讲解一些有关单片机的知识,顺便也讲解一下我们单片机用到的C语言知识。如果你对C语言还不太了解的话,可以看看博主的C语言专栏哟ÿ…...
【Redis】初识Redis
目录 Redis简介 Redis在内存中存储数据 Redis数据库中的应用 Redis缓存中的应用 Redis消息中间件 尾言 Redis简介 如下是Redis官网中,对Redis的一段描述 在这段描述中,我们提取如下关键要点: Redis主要用于在内存中存储数据Redis可…...
docker虚拟机平台未启用问题
在终端中输入如下代码,重启电脑即可 Enable-WindowsOptionalFeature -Online -FeatureName VirtualMachinePlatform 对于Docker Desktop - Unexpected WSL error问题 参考链接 解决WSL2与docker冲突问题...
《零基础Go语言算法实战》【题目 2-22】Go 调度器优先调度问题
《零基础Go语言算法实战》 【题目 2-22】Go 调度器优先调度问题 下面代码的输出是什么?请说明原因。 package main import ( "fmt" "runtime" "sync" ) func main() { runtime.GOMAXPROCS(1) wg : sync.WaitGroup{} wg.Add(10)…...
关于使用FastGPT 摸索的QA
近期在通过fastGPT,创建一些基于特定业务场景的、相对复杂的Agent智能体应用。 工作流在AI模型的基础上,可以定义业务逻辑,满足输出对话之外的需求。 在最近3个月来的摸索和实践中,一些基于经验的小问题点(自己也常常…...
关于H5复制ios没有效果
问题场景:今天遇到这样一个问题,需要从后端接口获取到的值进行复制,且不能提现调用获取值,因为是一个数据列表,每个列表元素需要当场点击调用接口获取值进行复制,本来以为很简单的一个需求,当做…...
【STM32-学习笔记-3-】TIM定时器
文章目录 TIM定时器Ⅰ、TIM定时器函数Ⅱ、TIM_TimeBaseInitTypeDef结构体参数①、TIM_ClockDivision②、TIM_CounterMode③、TIM_Period④、TIM_Prescaler⑤、TIM_RepetitionCounter Ⅱ、定时器配置Ⅲ、定时器外部中断NVIC配置 TIM定时器 Ⅰ、TIM定时器函数 // 将定时器寄存器…...
拯救受损二维码:用QRazyBox实现高效恢复的4个实战策略
拯救受损二维码:用QRazyBox实现高效恢复的4个实战策略 【免费下载链接】qrazybox QR Code Analysis and Recovery Toolkit 项目地址: https://gitcode.com/gh_mirrors/qr/qrazybox QRazyBox是一款专业的二维码分析与恢复工具包(QR Code Analysis …...
【游戏引擎之路】极速狂飙(一):5天打造跨平台Galgame播放器《Galplayer》——从脚本解析到电影式体验
1. 极速开发背后的技术选型 开发《Galplayer》最疯狂的地方在于,我只用了5天就完成了从零到可运行版本的开发。这听起来像天方夜谭,但合理的工具链选择让这一切成为可能。我选择了WPFPythonUnity这个"三件套"组合,每个工具都发挥了…...
无线网络实战:从零配置AP与SSID,打通设备互联
1. 无线网络基础概念扫盲 刚接触无线网络时,我经常被各种专业术语搞得晕头转向。其实搭建一个简单的办公网络并不复杂,我们先来理清几个关键概念。**AP(接入点)**就像无线网络中的"信号中转站",负责把有线网…...
3分钟掌握RegRipper:Windows注册表取证分析的终极武器
3分钟掌握RegRipper:Windows注册表取证分析的终极武器 【免费下载链接】RegRipper3.0 RegRipper3.0 项目地址: https://gitcode.com/gh_mirrors/re/RegRipper3.0 你是否曾面对Windows注册表文件感到无从下手?想知道如何快速提取关键数字证据&…...
HTML 开发 - HTML 描述列表标签(<dl>、<dt>、<dd>)
HTML 描述列表标签 1、基本介绍在 HTML 中,<dl>、<dt>、<dd> 标签用于创建描述列表(Description List)描述列表是一种专门用于展示 术语 - 描述 或 名称 - 值 对结构的语义化标签标签说明<dl>Description List&#…...
百度智能云千帆AppBuilder API调用全攻略:从密钥获取到实战代码示例
百度智能云千帆AppBuilder API深度集成指南:从密钥管理到高效调用实践 在人工智能应用开发领域,快速集成可靠的AI能力已成为开发者提升效率的关键。百度智能云千帆AppBuilder作为一站式AI原生应用开发平台,其API接口的灵活调用能力让开发者能…...
2026届毕业生推荐的六大AI辅助论文助手解析与推荐
Ai论文网站排名(开题报告、文献综述、降aigc率、降重综合对比) TOP1. 千笔AI TOP2. aipasspaper TOP3. 清北论文 TOP4. 豆包 TOP5. kimi TOP6. deepseek 鉴于“降ai”所表达的意思不清晰确切,猜测围绕这一主题或许是在探究关于AI的热度…...
奥尔特云智慧武装系统上线!基层武装管理从此“智”在必得!
随着国防动员与基层武装工作不断升级,传统管理模式存在信息化覆盖不全、数据归集粗放、智能化水平不足等问题,已难以适配高效管理与应急应战需求,数字化转型成为必然趋势。智慧武装系统是奥尔特云(深圳)智慧科技打造的…...
从SEED-Labs实验到实战:手把手教你编写无零字节的x86 Shellcode(附完整代码)
从SEED-Labs实验到实战:手把手教你编写无零字节的x86 Shellcode(附完整代码) 当你第一次看到"Shellcode"这个词时,可能会联想到某种神秘的编程黑魔法。实际上,它是安全研究中最具实用价值的技能之一——一段…...
MySQL服务从CentOS7迁移到Rocky Linux 9.4实施文档
一、文档概述 本文档针对CentOS 7系统上运行的MySQL服务迁移至Rocky Linux 9.4的完整实施流程进行说明,适用于生产环境下MySQL 5.7/8.0版本的迁移操作,涵盖迁移前准备、迁移执行、验证、回滚全流程,可有效控制迁移风险,保障业务连续性。 本次迁移可选两种方案:原地升级迁…...
