当前位置:网站首页>随笔-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);
}
}
边栏推荐
猜你喜欢
随机推荐
20220801使用安信可的ESP-01S模块实现WIFI的UART传输功能
【指针内功修炼】函数指针 + 函数指针数组 + 回调函数(二)
高等数学(第七版)同济大学 习题4-1 个人解答
你把 浏览器滚动事件 玩明白
STL简介
R7 6800H+RTX3050+120Hz 2.8K OLED屏,无畏Pro15 2022开启预售
A high-performance creation book, ASUS Dreadnought Pro15 2022 is completely enough for daily photo editing and editing!
币圈提款机:Solana钱包出现未知安全漏洞 大量用户数字资产被盗
取消转义字符(r)
问题7:功能测试花瓶用例
mysql占用服务器CPU100%的解决办法
2021年12月电子学会图形化三级编程题解析含答案:数星星
NFT盲盒挖矿DAO智能合约dapp系统开发详情
HDU 1406 (完数)
问题4:什么是缺陷?你们公司缺陷的优先级是怎样划分的?
【问题】使用pip安装第三方库的时候遇到“timeout”的解决方法
【常见 error】Vivado 综合出现中断、失败、“PID not specified”
[The Beauty of Software Engineering - Column Notes] 36 | What exactly do DevOps engineers do?
eolink告诉你,国内Api行业,可以内卷到什么程度?
HDU 1160 FatMouse's Speed(最长递减子序列变形)









