From b0a5d4688f1af73b5ad03ccc2df11c9aac1523a9 Mon Sep 17 00:00:00 2001 From: yyl <yyl> Date: 星期二, 29 七月 2025 16:56:23 +0800 Subject: [PATCH] Merge branch 'master' of http://192.168.1.20:10010/r/Project_SG_scripts --- 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