using Spine.Unity; using System; using System.Threading.Tasks; using UnityEngine; using UnityEngine.AddressableAssets; using UnityEngine.UI; public class MatchHat : MonoBehaviour { int index; public Button btn; public Image image_prop; public Transform fx_break; GameObject fx; public Animation ani; public SkeletonGraphic spine; public Action OnClickItem; [Space(10)] // 动画/Spine 名称常量 public string AniInitial = "eventMatchEasterOuterInitial"; public string AniUp = "eventMatchEasterOuterUp"; public string AniDown = "eventMatchEasterOuterDown"; public string AniDisappear = "eventMatchEasterOuterDisappear"; public string AniDisappearUp = "eventMatchEasterOuterSpecialDisappear"; public string AniShow = "eventMatchEasterSpecialShow"; public string AniSpDisappear = "eventMatchEasterSpecialDisappear"; public string AniTip = "eventMatchEasterOuterTip"; [Space(10)] public string SpineDisappear = "match_easter_special_disappear"; public string SpineShow = "match_easter_special_show"; private void Start() { btn.onClick.AddListener(() => { OnClickItem?.Invoke(index); }); } /// /// 帽子的状态 /// /// 状态值 0:未开启 1:开启中 2:已开启 public void Init(int index, int state, string fxName) { this.index = index; btn.gameObject.SetActive(state == 0); ani.gameObject.SetActive(state != 2); spine.gameObject.SetActive(false); if (state != 2) { if (state == 1) { ani.Play(AniUp); } else if (state == 0) { ani.Play(AniInitial); } LoadFx(fxName); } } async void LoadFx(string fxName) { if (fx != null) { Addressables.ReleaseInstance(fx); } fx = await Addressables.InstantiateAsync(fxName, fx_break).Task; } /// 原地盖回帽子 public void PlayDown() { btn.gameObject.SetActive(true); ani.Play(AniDown); } public void PlayInitial() { ani.Play(AniInitial); } /// /// 播放翻开动画 /// public void PlayUp() { btn.gameObject.SetActive(false); ani.Play(AniUp); } /// - 帽子消失,物品放大,微微晃动,物品缩小 + 透明 public void PlayDisappear() { ani.Play(AniDisappear); } /// - 套索消失,物品放大,微微晃动,物品缩小 + 透明 public void PlayDisappearUp() { ani.Play(AniDisappearUp); } /// /// - 随机套走 两对物品匹配的帽子(共 4 顶)- 物品放大,微微晃动,物品缩小 + 透明 /// public void PlaySpShow() { btn.gameObject.SetActive(false); spine.gameObject.SetActive(true); spine.AnimationState.SetAnimation(0, SpineShow, false); ani.Play(AniShow); } public void PlaySpDisappear() { spine.AnimationState.SetAnimation(0, SpineDisappear, false); ani.Play(AniSpDisappear); } public void ShowTips() { ani.Play(AniTip); } }