当前位置:网站首页>随笔-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);
}
}
边栏推荐
- 一对多查询(分页)
- Clickhouse Filling the Pit 3: Left Join changed to Right Join, resulting in incorrect statistical results
- 地球自转加快
- HDU 1029 Ignatius and the Princess IV
- 选择合适的 DevOps 工具,从理解 DevOps 开始
- 使用Typora+EasyBlogImageForTypora写博客,无图床快速上传图片
- 想成为网络安全技术爱好者(可能是黑客)的话,需要看什么书?
- STL简介
- 输出1!+2!+3!+......+n!
- 【重构map】【重构filter】【重构Some】【重构reduce方法】【重构flat函数】
猜你喜欢
随机推荐
PHP中高级面试题 – 第一天
不安装运行时运行.NET程序
2021年12月电子学会图形化三级编程题解析含答案:数星星
取消转义字符(r)
雷克萨斯lm的安全性如何,通过两个角度来聊这个话题
LeetCode15:三数之和
高性能创作本,日常修图剪辑选华硕无畏Pro15 2022完全足矣!
【实战】Next.js + 云函数开发一个面试刷题网站
MySQL性能优化的'4工具+10技巧'
QT之Mysql驱动
SwiftUI SQLite教程之了解如何在 SwiftUI 中使用 SQLite 数据库并执行 CRUD 操作(教程含源码)
gocron定时任务管理系统的安装与运行
liunx服务器nohup不输出日志文件的方法
HDU 1160 FatMouse's Speed(最长递减子序列变形)
个人秋招记录——欢迎交流
技术分享 | 接口自动化测试如何搞定 json 响应断言?
一文搞懂$_POST和php://input的区别
问题6:下拉框测试点
ffplay视频播放原理分析
交大医学院临床研究中心如何将 ModelWhale 应用于临床医生教学、研究丨数据科学 x 临床医学








