当前位置:网站首页>随笔-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);
}
}
边栏推荐
猜你喜欢

ffplay视频播放原理分析
![Detailed explanation of cloud hard disk EVS and how to use and avoid pits [HUAWEI CLOUD is simple and far]](/img/95/c05f184a6221fefaaa93beb9dccc33.png)
Detailed explanation of cloud hard disk EVS and how to use and avoid pits [HUAWEI CLOUD is simple and far]

MMA安装及使用优化

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

Day2:面试必考题目

2021年12月电子学会图形化三级编程题解析含答案:跳高比赛

C语言中操作符的详细介绍

Huffman tree

2021年12月电子学会图形化四级编程题解析含答案:质数判断器

测试基础整合-测试分类、软件质量模型、测试流程、测试用例、测试点划分方法、缺陷、例子
随机推荐
兆骑科创高层次人才引进平台,创新创业赛事活动路演
PAT乙级-B1014 福尔摩斯的约会(20)
使用华为HECS云服务器打造Telegraf+Influxdb+Grafana 监控系统【华为云至简致远】
问题4:什么是缺陷?你们公司缺陷的优先级是怎样划分的?
Several methods of installing Mysql in Linux
图形学-粒子系统 (Particle System)
面试官都震惊,你这“网络基础”可以啊
教你如何获取微信公众号历史文章链接
PostgreSQL V14中更好的SQL函数
PAT乙级-B1008 数组元素循环右移问题(20)
分布式系统与微服务的区别
NFT盲盒挖矿DAO智能合约dapp系统开发详情
一对多查询(分页)
程序员面试必备PHP基础面试题 – 第二十天
苹果开发「AI 建筑师」GAUDI:根据文本生成超逼真 3D 场景!
leetcode-105 从前序与中序遍历序列构造二叉树-使用栈代替递归
Huffman tree
6000 字+,帮你搞懂互联网架构演变历程!
又有大厂员工连续加班倒下/ 百度搜狗取消快照/ 马斯克生父不为他骄傲...今日更多新鲜事在此...
R7 6800H+RTX3050+120Hz 2.8K OLED screen, Intrepid Pro15 2022 pre-sale