当前位置: 首页 > news >正文

Unity Spine帧事件

SpinePro中添加事件帧

首先 选中右上角的层级树 然后选择事件选项

在这里插入图片描述

最后在右下角看到 新建 点击它 新建一个事件

在这里插入图片描述
在这里插入图片描述

点击左上角的设置按钮 弹出编辑窗口

在这里插入图片描述
编辑窗口
在这里插入图片描述

在右上角 动画栏 可以切换对应的动画

点坐边的那个小灰点来切换 亮点代表当前动画
在这里插入图片描述

选中帧

在这里插入图片描述

添加事件 点击对应事件的🔑图标 在当前帧添加事件

在这里插入图片描述

添加成功后 点击左下角播放按钮 可以看到 人物身边有对应事件的文本弹出 表示添加成功

在这里插入图片描述

Unity监听Spine帧事件

面板上添加

可以一个事件 添加多个监听
在这里插入图片描述

代码中动态添加

一个事件可以添加多个监听
在这里插入图片描述

在这里插入图片描述

源码

using System.Collections.Generic;
using UnityEngine;
using Spine.Unity;
using Spine;
using System;
using UnityEngine.Events;public class SpineEventHelper : MonoBehaviour
{[Serializable]public class SpineFrameKey{[SpineEvent] public string key;public UnityEvent handler;}[SerializeField] private List<SpineFrameKey> handlers;private Dictionary<string, UnityEvent> keyFrameEventDict = new Dictionary<string, UnityEvent>( );public const string START_EVENT = "START_EVENT", END_EVENT = "END_EVENT";private SkeletonAnimation skeletonAnimation;private void Start( ){Bind( );}private void Bind( ){skeletonAnimation = GetComponent<SkeletonAnimation>( );if ( skeletonAnimation == null ) return;skeletonAnimation.AnimationState.Event += HandleEvent;skeletonAnimation.AnimationState.Start += delegate ( TrackEntry trackEntry ){if ( keyFrameEventDict.TryGetValue( START_EVENT, out UnityEvent @event ) ){@event.Invoke( );}};skeletonAnimation.AnimationState.End += delegate{if ( keyFrameEventDict.TryGetValue( END_EVENT, out UnityEvent @event ) ){@event.Invoke( );}};foreach ( var handler in handlers ){keyFrameEventDict[ handler.key ] = handler.handler;}}/// <summary>/// 添加自定义的帧事件/// </summary>/// <param name="key"> 帧名称 </param>/// <param name="handler"> 处理的方法 </param>public void AddCustomEventHandler( string key, UnityAction handler ){if ( keyFrameEventDict.TryGetValue( key, out UnityEvent ev ) ){ev.AddListener( handler );}else{var ue = new UnityEvent( );ue.AddListener( handler );keyFrameEventDict.Add( key, ue );}}/// 移除自定义的帧事件/// </summary>/// <param name="key"> 指定帧名称 </param>/// <param name="handler"> 处理的方法 如果忽略则移除key的所有帧事件 </param>public void RemoveCustomEventHandler( string key, UnityAction handler = null ){if ( keyFrameEventDict.TryGetValue( key, out UnityEvent ev ) ){if ( handler == null ){ev.RemoveAllListeners( );}else{ev.RemoveListener( handler );}}}/// <summary>/// 添加动画开始事件/// </summary>/// <param name="handler"> 开始处理事件的方法 </param>public void AddStartEventHandler( UnityAction handler ){if ( keyFrameEventDict.TryGetValue( START_EVENT, out UnityEvent ev ) ){ev.AddListener( handler );}else{var ue = new UnityEvent( );ue.AddListener( handler );keyFrameEventDict.Add( START_EVENT, ue );}}/// <summary>/// 移除开始帧事件/// </summary>/// <param name="handler"></param>public void RemoveStartEventHandler( UnityAction handler ){if ( keyFrameEventDict.TryGetValue( START_EVENT, out UnityEvent ev ) ){ev.RemoveListener( handler );}}/// <summary>/// 添加结束帧事件/// </summary>/// <param name="handler"></param>public void AddEndEventHandler( UnityAction handler ){if ( keyFrameEventDict.TryGetValue( END_EVENT, out UnityEvent ev ) ){ev.AddListener( handler );}else{var ue = new UnityEvent( );ue.AddListener( handler );keyFrameEventDict.Add( END_EVENT, ue );}}/// <summary>/// 移除结束帧事件/// </summary>/// <param name="handler"></param>public void RemoveEndEventHandler( UnityAction handler ){if ( keyFrameEventDict.TryGetValue( END_EVENT, out UnityEvent ev ) ){ev.RemoveListener( handler );}}private void HandleEvent( TrackEntry trackEntry, Spine.Event e ){if ( keyFrameEventDict.TryGetValue( e.Data.Name, out UnityEvent @event ) ){@event.Invoke( );}}/// <summary>/// 清理所有帧事件 /// </summary>public void Clear( ){keyFrameEventDict.Clear( );}private void OnDestroy( ){Clear( );    }
}

相关文章:

Unity Spine帧事件

SpinePro中添加事件帧 首先 选中右上角的层级树 然后选择事件选项 最后在右下角看到 新建 点击它 新建一个事件 点击左上角的设置按钮 弹出编辑窗口 编辑窗口 在右上角 动画栏 可以切换对应的动画 点坐边的那个小灰点来切换 亮点代表当前动画 选中帧 添加事件 点击对应事件…...

AE使用(一)

打开AE 点击“新建合成” 注意参数&#xff1a;宽度高度是视频是横屏还是竖屏。发布在抖音上&#xff0c;需要做出来竖屏效果&#xff1b;发布在视频网站中需要做出横屏效果。没用特殊需求&#xff0c;默认参数就行。 导入素材&#xff1a;左键双击“导入素材区”的空白部分。 …...

YOLOv5、YOLOv8改进:MobileViT:轻量通用且适合移动端的视觉Transformer

MobileViT: Light-weight, General-purpose, and Mobile-friendly Vision Transformer 论文&#xff1a;https://arxiv.org/abs/2110.02178 1简介 MobileviT是一个用于移动设备的轻量级通用可视化Transformer&#xff0c;据作者介绍&#xff0c;这是第一次基于轻量级CNN网络性…...

06-4_Qt 5.9 C++开发指南_MDI应用程序设计

文章目录 1. MDI简介2. 文档窗口类 QFormDoc 的设计3. MDI主窗口设计与子窗口的使用3.1 主窗口界面设计3.2 MDI子窗口的创建与加入3.3 QMdiArea 常用功能函数3.4 MDI的信号 4. 源码4.1 qwmainwindow.h4.2 qwmainwindow.cpp 1. MDI简介 传统的应用程序设计中有多文档界面(Multi…...

【SCI征稿】3区SCI,正刊,智能传感、机器学习、智能检测与测量等均可

影响因子&#xff1a;IF&#xff1a;2.0-3.0 期刊分区&#xff1a;JCR3区&#xff0c;中科院4区 检索情况&#xff1a;SCIE在检&#xff0c;正刊 征稿领域&#xff1a;智能技术在测量与检测中的应用研究&#xff0c;如&#xff1a; ● 复杂系统的智能传感和高级故障诊断 ●…...

神经网络ANN(MLP),CNN以及RNN区别和应用

1. Artificial Neural Network(ANN) 又称为Multilayer Perception Model(MLP) 2. CNN AAA 3. RNN 22 先占坑&#xff0c;后期再整理 References [1] CNN vs.RNN vs.ANN——浅析深度学习中的三种神经网络 - 知乎 [2] https://www.youtube.com/watch?vu7obuspdQu4 [3] 深…...

CUDA、cuDNN以及Pytorch介绍

文章目录 前言一、CUDA二、cuDNN三、Pytorch 前言 在讲解cuda和cuDNN之前&#xff0c;我们首先来了解一下英伟达&#xff08;NVIDA&#xff09;公司。 NVIDIA是一家全球领先的计算机技术公司&#xff0c;专注于图形处理器&#xff08;GPU&#xff09;和人工智能&#xff08;…...

使用shift关键字,写一个带二级命令的脚本(如:docker run -a -b -c中的run)

省流&#xff1a;shift关键字 探索思路 最近有一个小小的需求&#xff0c;写一个类似于docker run -a -b -c这样的脚本&#xff0c;这个脚本名为doline&#xff0c;它本身可以执行&#xff08;doline -a -b -c&#xff09;&#xff0c;同时又带有几个如run、init、start这样的…...

MySQL学习笔记 - 进阶部分

MySQL进阶部分 字符集的相关操作&#xff1a;字符集和比较规则&#xff1a;utf8与utf8mb4&#xff1a;比较规则&#xff1a;常见的字符集和对应的Maxlen&#xff1a; Centos7中linux下配置字符集&#xff1a;各个级别的字符集&#xff1a;执行show variables like %character%语…...

微信小程序实现左滑删除

一、效果 二、代码 实现思路使用的是官方提供的 movable-area&#xff1a;注意点&#xff0c;需要设置其高度&#xff0c;否则会出现列表内容重叠的现象。由于movable-view需要向右移动&#xff0c;左滑的时候给删除控件展示的空间&#xff0c;故 movable-area 需要左移 left:…...

安防视频监控有哪些存储方式?哪种存储方式最优?

视频监控系统涉及到大量的视频数据&#xff0c;需要对这些数据进行存储&#xff0c;以备日后查看或备份。视频监控的存储需求需要根据场所的实际情况进行选择&#xff0c;以保证监控数据的有效存储和日后的调阅、回溯。 当前视频监控的存储方式&#xff0c;通常有以下几种&…...

02-C++数据类型-高级

数据类型-高级 4、复合类型 4.4、结构简介 struct inflatable {char name[20];float vol;double price; };inflatable vincent; //C struct inflatable goose; //C例子 // structur.cpp -- a simple structure #include <iostream> struct inflatable // structu…...

Kotlin实战之获取本地配置文件、远程Apollo配置失败问题排查

背景 Kotlin作为一门JVM脚本语言&#xff0c;收到很多Java开发者的青睐。 项目采用JavaKotlin混合编程。Spring Boot应用开发&#xff0c;不会发生变动的配置放在本地配置文件&#xff0c;可能会变化的配置放在远程Apollo Server。 问题 因为业务需要&#xff0c;需要增加一…...

TCP协议的报头格式和滑动窗口

文章目录 TCP报头格式端口号序号和确认序号确认应答&#xff08;ACK&#xff09;机制超时重传机制 首部长度窗口大小报文类型URGACKSYNPSHFINRST 滑动窗口滑动窗口的大小怎么设定怎么变化滑动窗口变化问题 TCP报头格式 端口号 两个端口号比较好理解&#xff0c;通过端口号来找…...

java 使用log4j显示到界面和文件 并格式化

1.下载log4j jar包https://dlcdn.apache.org/logging/log4j/2.20.0/apache-log4j-2.20.0-bin.zip 2. 我只要到核心包 &#xff0c;看需要 sources是源码包&#xff0c;可以看到说明。在IDEA里先加入class jar后&#xff0c;再双击这个class jar包或或右键选Navigate ,Add ,…...

【js】链接中有多余的怎么取出参数值

https://pq.equalearning.net/assessment/379208869278126080?userId23ebb&originhttps://www.equalearning.net&fnameIm&lnamehappy在上面的例子中&#xff0c;fnameI’m&#xff0c;其中单引号’被转义为&#xff0c; 而如果使用下面的代码&#xff0c;因为在UR…...

Verdi_traceX and autotrace

Verdi_traceX and autotrace Trace X From nWave/nTrace of from the Teporal Flow View. Show Paths on Flow ViewShow Paths on nWave 若Waveform中有X态&#xff0c;鼠标右键会有Trace X的选项&#xff1b; 会自动打开Temporal Flow View窗口&#xff0c;展示对应路径&am…...

安卓逆向 - 某严选app sign算法还原

本文仅供学习交流&#xff0c;只提供关键思路不会给出完整代码&#xff0c;严禁用于非法用途&#xff0c;若有侵权请联系我删除&#xff01; 目标app: 5ouN5ouN5Lil6YCJMy45LjY 目标接口&#xff1a;aHR0cHM6Ly9hcGkubS5qZC5jb20vYXBp 一、引言 1、本篇分析某二手交易平台 …...

arcgis数据采集与拓扑检查

1、已准备好一张配准好的浙江省行政区划图&#xff0c;如下&#xff1a; 2、现在需要绘制湖州市县级行政区划。需要右击文件夹新建文件地理数据库&#xff0c;如下&#xff1a; 其余步骤均默认即可。 创建好县级要素数据集后&#xff0c;再新建要素类&#xff0c;命名为县。 为…...

【前端 | CSS】滚动到底部加载,滚动监听、懒加载

背景 在日常开发过程中&#xff0c;我们会遇到图片懒加载的功能&#xff0c;基本原理是&#xff0c;滚动条滚动到底部后再次获取数据进行渲染。 那怎么判断滚动条是否滚动到底部呢&#xff1f;滚动条滚动到底部触发时间的时机和方法又该怎样定义&#xff1f; 针对以上问题我…...

盘古信息PCB行业解决方案:以全域场景重构,激活智造新未来

一、破局&#xff1a;PCB行业的时代之问 在数字经济蓬勃发展的浪潮中&#xff0c;PCB&#xff08;印制电路板&#xff09;作为 “电子产品之母”&#xff0c;其重要性愈发凸显。随着 5G、人工智能等新兴技术的加速渗透&#xff0c;PCB行业面临着前所未有的挑战与机遇。产品迭代…...

Unity3D中Gfx.WaitForPresent优化方案

前言 在Unity中&#xff0c;Gfx.WaitForPresent占用CPU过高通常表示主线程在等待GPU完成渲染&#xff08;即CPU被阻塞&#xff09;&#xff0c;这表明存在GPU瓶颈或垂直同步/帧率设置问题。以下是系统的优化方案&#xff1a; 对惹&#xff0c;这里有一个游戏开发交流小组&…...

Cesium1.95中高性能加载1500个点

一、基本方式&#xff1a; 图标使用.png比.svg性能要好 <template><div id"cesiumContainer"></div><div class"toolbar"><button id"resetButton">重新生成点</button><span id"countDisplay&qu…...

解决Ubuntu22.04 VMware失败的问题 ubuntu入门之二十八

现象1 打开VMware失败 Ubuntu升级之后打开VMware上报需要安装vmmon和vmnet&#xff0c;点击确认后如下提示 最终上报fail 解决方法 内核升级导致&#xff0c;需要在新内核下重新下载编译安装 查看版本 $ vmware -v VMware Workstation 17.5.1 build-23298084$ lsb_release…...

【决胜公务员考试】求职OMG——见面课测验1

2025最新版&#xff01;&#xff01;&#xff01;6.8截至答题&#xff0c;大家注意呀&#xff01; 博主码字不易点个关注吧,祝期末顺利~~ 1.单选题(2分) 下列说法错误的是:&#xff08; B &#xff09; A.选调生属于公务员系统 B.公务员属于事业编 C.选调生有基层锻炼的要求 D…...

【服务器压力测试】本地PC电脑作为服务器运行时出现卡顿和资源紧张(Windows/Linux)

要让本地PC电脑作为服务器运行时出现卡顿和资源紧张的情况&#xff0c;可以通过以下几种方式模拟或触发&#xff1a; 1. 增加CPU负载 运行大量计算密集型任务&#xff0c;例如&#xff1a; 使用多线程循环执行复杂计算&#xff08;如数学运算、加密解密等&#xff09;。运行图…...

c#开发AI模型对话

AI模型 前面已经介绍了一般AI模型本地部署&#xff0c;直接调用现成的模型数据。这里主要讲述讲接口集成到我们自己的程序中使用方式。 微软提供了ML.NET来开发和使用AI模型&#xff0c;但是目前国内可能使用不多&#xff0c;至少实践例子很少看见。开发训练模型就不介绍了&am…...

智能分布式爬虫的数据处理流水线优化:基于深度强化学习的数据质量控制

在数字化浪潮席卷全球的今天&#xff0c;数据已成为企业和研究机构的核心资产。智能分布式爬虫作为高效的数据采集工具&#xff0c;在大规模数据获取中发挥着关键作用。然而&#xff0c;传统的数据处理流水线在面对复杂多变的网络环境和海量异构数据时&#xff0c;常出现数据质…...

Rust 开发环境搭建

环境搭建 1、开发工具RustRover 或者vs code 2、Cygwin64 安装 https://cygwin.com/install.html 在工具终端执行&#xff1a; rustup toolchain install stable-x86_64-pc-windows-gnu rustup default stable-x86_64-pc-windows-gnu ​ 2、Hello World fn main() { println…...

【SpringBoot自动化部署】

SpringBoot自动化部署方法 使用Jenkins进行持续集成与部署 Jenkins是最常用的自动化部署工具之一&#xff0c;能够实现代码拉取、构建、测试和部署的全流程自动化。 配置Jenkins任务时&#xff0c;需要添加Git仓库地址和凭证&#xff0c;设置构建触发器&#xff08;如GitHub…...