using Spine; using Spine.Unity; using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.Events; using UnityEngine.Serialization; public class SpineAnimtionPlay : MonoBehaviour { [System.Serializable] public class Control { [Space(10)] public int layer; [SpineAnimation] public string name; public bool loop; [Space] public float timeScale = 1f; [Space] public bool useMixDuration; public float mixDuration; [Space(10)] public bool USE_END = false; [System.Serializable] public class EndEvent : UnityEvent { } [FormerlySerializedAs("onEnd")] [SerializeField] [Space(10)] private EndEvent onEnd = new EndEvent(); public void PlayEnd() { onEnd.Invoke(true); } } public SkeletonAnimation skeletonAnimation; [Space(10)] public List data; Spine.AnimationState spineState; public void Play(int idx) { Play(data[idx]); } public void Play(Control control) { if (spineState == null) spineState = skeletonAnimation.state; TrackEntry track = spineState.SetAnimation(control.layer, control.name, control.loop); if (track != null) { if (control != null) { track.MixDuration = control.useMixDuration ? control.mixDuration : 0; track.TimeScale = control.timeScale; } if (control.USE_END) { track.Complete += delegate (TrackEntry entry) { control.PlayEnd(); }; } //if (OnEvent != null) //{ // track.Event += delegate (TrackEntry trackEntry, Spine.Event e) // { // OnEvent(e); // }; //} } } }