- 实现骨骼动画动作的切换,主要由美术提供Spine骨骼动画文件,里面有对应的动作action。该方式通过action名字进行切换指定的骨骼动作。
- 变身,将原来创建的游戏物体删掉,创建新的游戏物体绑定新的骨骼动画文件达到变身的目的。 ```csharp using System.Collections; using System.Collections.Generic; using UnityEngine; using Spine; using Spine.Unity; using System; using System.Runtime.CompilerServices;
///
/// <summary>/// 实例化/// </summary>/// <returns></returns>public static SpineAnimationManage Instance(){if (manage == null){manage = new SpineAnimationManage();}return manage;}/// <summary>/// 动画播放/// </summary>/// <param name="sg">动画对象</param>/// <param name="trackIndex">权重值:数值越大优先级越高</param>/// <param name="action">指定动作</param>/// <param name="actionDefault">默认动作</param>/// <param name="loop">是否循环</param>public void SpinePlayAnimation(SkeletonGraphic sg, int trackIndex, string action, string actionDefault, bool loop){//var spineAnimation = assest.GetSkeletonData(false).FindAnimation(action);if (!string.IsNullOrEmpty(action) && !string.IsNullOrEmpty(actionDefault)){if (loop){sg.AnimationState.SetAnimation(trackIndex, action, loop);}else{sg.AnimationState.SetAnimation(trackIndex, action, loop).Complete += delegate{sg.AnimationState.SetAnimation(trackIndex, actionDefault, true);};}}}/// <summary>/// 动画按添加顺序播放/// </summary>/// <param name="flag">是否循环</param>/// <param name="count">循环次数</param>public static void SpinePlayDic(bool flag,int count){if (flag){//for (int i = 0; i < count; i++)//{// showDic();//}}else{//showDic();}}/// <summary>/// 设置前一个动画向后一个动画之间平滑过渡的时间,切换的时候混合多少/// </summary>/// <param name="beforeName">前一个动画</param>/// <param name="afterName">后一个动画</param>/// <param name="time">平滑过渡的时间</param>public static void SpineMix(AnimationStateData animStateData, string beforeName, string afterName, float time){animStateData.SetMix(beforeName, afterName, time);}/// <summary>/// 倍速播放,等于0 动画暂停,注意速度更改后为永久性的/// </summary>/// <param name="speed">播放速度</param>public static void SpineSpeed(SkeletonGraphic skeletonGraphic, float speed){skeletonGraphic.timeScale = speed;}/// <summary>/// 从任意某一帧开始播放/// </summary>/// <param name="weight">权重值</param>/// <param name="spineName">动画名称</param>/// <param name="flag">是否循环</param>/// <param name="frames">要开始的帧数</param>public static void SpineAnyPointPlay(SkeletonGraphic skeletonGraphic, int weight, string spineName, bool flag, float frames){skeletonGraphic.AnimationState.SetAnimation(weight, spineName, flag).TrackTime = frames / 30f;}
}
```
