From 614597ff71a8de4c3c1fb889db285ca2513cc7b3 Mon Sep 17 00:00:00 2001 From: hch <305670599@qq.com> Date: 星期二, 29 七月 2025 00:56:09 +0800 Subject: [PATCH] 0312 去掉表默认的多线程引用,小游戏不支持多线程;特效分离出UI特效;增加按钮组的控制;特效增加池管理 --- Main/System/Hero/UIHeroController.cs | 59 ++++++++++++++++++++++++++++++++++++++++++----------------- 1 files changed, 42 insertions(+), 17 deletions(-) diff --git a/Main/System/Hero/UIHeroController.cs b/Main/System/Hero/UIHeroController.cs index 241063a..1b25862 100644 --- a/Main/System/Hero/UIHeroController.cs +++ b/Main/System/Hero/UIHeroController.cs @@ -6,17 +6,42 @@ using UnityEngine.EventSystems; public class UIHeroController : MonoBehaviour { + private GameObjectPoolManager.GameObjectPool pool; + private int skinID; + protected SkeletonGraphic skeletonGraphic; + + protected Spine.AnimationState spineAnimationState; + private GameObject instanceGO; + + private Action onComplete; public void Create(int _skinID, float scale = 1f, Action _onComplete = null) { + if (skinID == _skinID) + { + //閬垮厤閲嶅鍒涘缓 + return; + } + skinID = _skinID; onComplete = _onComplete; - GameObject battleGO = UILoader.LoadPrefab("UIHero"); - GameObject instanceGO = null; + pool = GameObjectPoolManager.Instance.RequestPool(UILoader.LoadPrefab("UIHero")); + if (!transform.gameObject.activeSelf) { transform.SetActive(true); } - instanceGO = GameObject.Instantiate(battleGO, transform); + if (instanceGO == null) + { + instanceGO = pool.Request(); + instanceGO.transform.SetParent(transform); + //transform 鐨凱ivot Y鏄�0锛岃instanceGO 灞呬腑 + instanceGO.transform.localPosition = new Vector3(0, transform.GetComponent<RectTransform>().sizeDelta.y * 0.5f); + + //instanceGO.transform.localPosition = Vector3.zero; + instanceGO.transform.localScale = Vector3.one; + instanceGO.transform.localRotation = Quaternion.identity; + } + skeletonGraphic = instanceGO.GetComponentInChildren<SkeletonGraphic>(true); var skinConfig = HeroSkinConfig.Get(skinID); skeletonGraphic.skeletonDataAsset = ResManager.Instance.LoadAsset<SkeletonDataAsset>("Hero/SpineRes/", skinConfig.SpineRes + "_SkeletonData"); @@ -24,32 +49,32 @@ this.transform.localScale = Vector3.one * scale; spineAnimationState = skeletonGraphic.AnimationState; PlayAnimation(MotionName.idle, true); - + spineAnimationState.Complete -= OnAnimationComplete; spineAnimationState.Complete += OnAnimationComplete; } - private int skinID; - protected SkeletonGraphic skeletonGraphic; - - protected Spine.AnimationState spineAnimationState; - - private Spine.TrackEntry currentTrackEntry; - private Action onComplete; - void Destroy() + + protected void OnDestroy() { - spineAnimationState.Complete -= OnAnimationComplete; + if (spineAnimationState != null) + { + spineAnimationState.Complete -= OnAnimationComplete; + } + if (pool != null) + pool.Release(instanceGO); + skeletonGraphic = null; + pool = null; } - public virtual Spine.TrackEntry PlayAnimation(MotionName motionName, bool loop = false) + public virtual void PlayAnimation(MotionName motionName, bool loop = false) { - if (spineAnimationState == null) return null; + if (spineAnimationState == null) return; // 鐩存帴浣跨敤 ToString() 鑰屼笉鏄皟鐢� GetAnimationName - currentTrackEntry = spineAnimationState.SetAnimation(0, motionName.ToString(), loop); - return currentTrackEntry; + spineAnimationState.SetAnimation(0, motionName.ToString(), loop); } /// <summary> -- Gitblit v1.8.0