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