当前位置:网站首页>随笔-Unity中一个简易的Spine动画控制器
随笔-Unity中一个简易的Spine动画控制器
2022-08-03 15:07:00 【魂牵丶梦萦】
我们在Unity中使用Spine动画时,调整一个属性可能调用的是不同类,可能简简单单启动一个动画需要写很多个函数,于是我这边对Spine的动画控制做了一个简易的封装,在目前来说使用还是很方便的,也并不难。如果需要什么其他功能也可以随时添加。废话不多说,直接上代码:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using Spine.Unity;
using System;
using static Spine.AnimationState;
public class SpineAnimCtrl : MonoBehaviour
{
/// <summary>
/// 播放Spine动画
/// </summary>
/// <param name="spine"></param>
/// <param name="trackIndex"></param>
/// <param name="animName"></param>
/// <param name="loop"></param>
/// <param name="skinName"></param>
/// <param name="callBack"></param>
public static void PlayAnim(SkeletonAnimation spine, int trackIndex, string animName, bool loop, string skinName = "", Action callBack = null)
{
Spine.Skeleton skeleton = spine.skeleton;
Spine.AnimationState state = spine.AnimationState;
if (spine != null)
{
if (!string.IsNullOrEmpty(skinName))
skeleton.SetSkin(skinName);
state.SetAnimation(trackIndex, animName, loop);
}
TrackEntryDelegate animCallBack = null;
animCallBack = delegate
{
if (callBack != null)
{
callBack.Invoke();
}
state.Complete -= animCallBack;
animCallBack = null;
};
state.Complete += animCallBack;
}
/// <summary>
/// 播放Spine动画(UI)
/// </summary>
/// <param name="spine"></param>
/// <param name="trackIndex"></param>
/// <param name="animName"></param>
/// <param name="loop"></param>
/// <param name="skinName"></param>
/// <param name="callBack"></param>
public static void PlayAnim(SkeletonGraphic spine, int trackIndex, string animName, bool loop, string skinName = "", Action callBack = null)
{
Spine.Skeleton skeleton = spine.Skeleton;
Spine.AnimationState state = spine.AnimationState;
if (spine != null)
{
if (!string.IsNullOrEmpty(skinName))
skeleton.SetSkin(skinName);
state.SetAnimation(trackIndex, animName, loop);
}
TrackEntryDelegate animCallBack = null;
animCallBack = delegate
{
if (callBack != null)
{
callBack.Invoke();
}
state.Complete -= animCallBack;
animCallBack = null;
};
state.Complete += animCallBack;
}
/// <summary>
/// 停止Spine动画
/// </summary>
/// <param name="spine"></param>
/// <param name="trackIndex"></param>
/// <param name="mixDuration"></param>
public static void StopAnim(SkeletonAnimation spine, int trackIndex, float mixDuration)
{
Spine.AnimationState state = spine.AnimationState;
state.SetEmptyAnimation(trackIndex, mixDuration);
}
/// <summary>
/// 停止Spine动画(UI)
/// </summary>
/// <param name="spine"></param>
/// <param name="trackIndex"></param>
/// <param name="mixDuration"></param>
public static void StopAnim(SkeletonGraphic spine, int trackIndex, float mixDuration)
{
Spine.AnimationState state = spine.AnimationState;
state.SetEmptyAnimation(trackIndex, mixDuration);
}
}
边栏推荐
猜你喜欢

ubiquant量化竞赛

问题7:功能测试花瓶用例

云硬盘EVS详解以及如何用与避坑【华为云至简致远】

【R语言科研绘图】--- 柱状图

R7 6800H+RTX3050+120Hz 2.8K OLED screen, Intrepid Pro15 2022 pre-sale

2021年12月电子学会图形化四级编程题解析含答案:棕熊大战

2021年12月电子学会图形化四级编程题解析含答案:聪明的小猫

图形学-粒子系统 (Particle System)

SQL 不新增表 把一张表定义成两张

Currency ATM: Solana Wallet Has Unknown Security Vulnerability, A Large Number Of Users' Digital Assets Are Stolen
随机推荐
生物统计师与临床医生协同研究使用的低代码洞察平台丨数据科学 x 临床医学
Taurus.MVC WebAPI 入门开发教程1:框架下载环境配置与运行(含系列目录)。
文件包含之伪协议的使用
HDU Largest prime factor(埃拉托色尼筛选法求素数模板法改动)
兆骑科创创业大赛,双创服务平台,线上直播路演
有希望就是好的
今日睡眠质量记录75分
cmd 关闭端口
ffplay视频播放原理分析
【周报】2022年7月24日
PAT乙级-B1018 锤子剪刀布(20)
【指针内功修炼】函数指针 + 函数指针数组 + 回调函数(二)
你把 vite打包 玩明白
ubiquant量化竞赛
devops-2:Jenkins的使用及Pipeline语法讲解
LeetCode136:只出现一次的数字
想成为网络安全技术爱好者(可能是黑客)的话,需要看什么书?
Phaser(二):小恐龙跑酷游戏
问题10:注册页面的易用性测试?
PAT乙级-B1017 A除以B(20)