From cec8b67d82c2c2c1662d55c818c4a46bcc0487db Mon Sep 17 00:00:00 2001
From: yyl <yyl>
Date: 星期一, 25 八月 2025 17:36:02 +0800
Subject: [PATCH] 125 【战斗】战斗系统 战斗技能

---
 Main/System/Hero/UIHeroController.cs |  118 ++++++++++++++++++++++++++++++++++++++++++-----------------
 1 files changed, 84 insertions(+), 34 deletions(-)

diff --git a/Main/System/Hero/UIHeroController.cs b/Main/System/Hero/UIHeroController.cs
index dde8706..1b11019 100644
--- a/Main/System/Hero/UIHeroController.cs
+++ b/Main/System/Hero/UIHeroController.cs
@@ -2,53 +2,103 @@
 using System;
 using Spine.Unity;
 using UnityEngine;
-using UnityEngine.Events;
-using UnityEngine.EventSystems;
+
 public class UIHeroController : MonoBehaviour
 {
-	public void Create(int _skinID, Action _onComplete = null)
-	{
-		skinID = _skinID;
-		onComplete = _onComplete;
-		GameObject battleGO = ResManager.Instance.LoadAsset<GameObject>("Hero/SpineRes", "Hero_001");
-		GameObject instanceGO = null;
-		if (!transform.gameObject.activeSelf)
-		{
-			transform.SetActive(true);
-		}
-		instanceGO = GameObject.Instantiate(battleGO, transform);
-		skeletonGraphic = instanceGO.GetComponentInChildren<SkeletonGraphic>(true);
-		var skinConfig = HeroSkinConfig.Get(skinID);
-		skeletonGraphic.skeletonDataAsset = ResManager.Instance.LoadAsset<SkeletonDataAsset>("Hero/SpineRes/", skinConfig.SpineRes + "_SkeletonData");
-		skeletonGraphic.Initialize(true);
-		spineAnimationState = skeletonGraphic.AnimationState;
-		PlayAnimation(MotionName.idle, true);
-
-		spineAnimationState.Complete += OnAnimationComplete;
-	}
+	private GameObjectPoolManager.GameObjectPool pool;
 	private int skinID;
 	protected SkeletonGraphic skeletonGraphic;
 
 	protected Spine.AnimationState spineAnimationState;
+	private GameObject instanceGO;
 
-	private Spine.TrackEntry currentTrackEntry;
 	private Action onComplete;
-
-
-
-	void Destroy()
+	public void Create(int _skinID, float scale = 1f, Action _onComplete = null, string motionName = "idle", bool isLh = false)
 	{
+		if (skinID == _skinID)
+		{ 
+			//閬垮厤閲嶅鍒涘缓
+			return;
+		}
+
+		skinID = _skinID;
+		onComplete = _onComplete;
+		pool = GameObjectPoolManager.Instance.RequestPool(UILoader.LoadPrefab("UIHero"));
+		
+		if (!transform.gameObject.activeSelf)
+		{
+			transform.SetActive(true);
+		}
+		if (instanceGO == null)
+		{ 
+			instanceGO = pool.Request();
+			instanceGO.transform.SetParent(transform);
+			//transform 鐨凱ivot Y鏄�0锛岃instanceGO 灞呬腑
+			instanceGO.transform.localPosition = new Vector3(0, instanceGO.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);
+		if (isLh)
+		{
+			skeletonGraphic.skeletonDataAsset = ResManager.Instance.LoadAsset<SkeletonDataAsset>("Hero/SpineRes/", skinConfig.Tachie);
+		}
+		else
+		{ 
+			skeletonGraphic.skeletonDataAsset = ResManager.Instance.LoadAsset<SkeletonDataAsset>("Hero/SpineRes/", skinConfig.SpineRes);
+		}
+		skeletonGraphic.Initialize(true);
+		this.transform.localScale = Vector3.one * scale;
+		spineAnimationState = skeletonGraphic.AnimationState;
+		spineAnimationState.Data.DefaultMix = 0f;
+		if (motionName == "")
+			motionName = GetFistSpineAnim();
+		PlayAnimation(motionName, true);
 		spineAnimationState.Complete -= OnAnimationComplete;
+		spineAnimationState.Complete += OnAnimationComplete;
 	}
 
 
-    public virtual Spine.TrackEntry PlayAnimation(MotionName motionName, bool loop = false)
-    {
-        if (spineAnimationState == null) return null;
 
-        // 鐩存帴浣跨敤 ToString() 鑰屼笉鏄皟鐢� GetAnimationName
-        currentTrackEntry = spineAnimationState.SetAnimation(0, motionName.ToString(), loop);
-        return currentTrackEntry;
+
+	protected void OnDestroy()
+	{
+        if (spineAnimationState != null)
+        {
+            spineAnimationState.Complete -= OnAnimationComplete;
+        }
+		if (pool != null)
+			pool.Release(instanceGO);
+		skeletonGraphic = null;
+		pool = null;
+	}
+
+
+    public virtual void PlayAnimation(string motionName, bool loop = false)
+    {
+        if (spineAnimationState == null) return;
+
+		// 鐩存帴浣跨敤 ToString() 鑰屼笉鏄皟鐢� GetAnimationName
+        spineAnimationState.SetAnimation(0, motionName.ToString(), loop);
+    }
+
+	// 鎾斁绗竴涓姩鐢伙紙浣滀负榛樿鍔ㄧ敾锛�
+	string GetFistSpineAnim()
+	{
+		var skeletonData = skeletonGraphic.Skeleton.Data;
+		if (skeletonData.Animations.Count > 0)
+		{
+			return skeletonData.Animations.Items[0].Name;
+		}
+		else
+		{
+			Debug.LogError("Spine 鏁版嵁涓病鏈夋壘鍒颁换浣曞姩鐢伙紒姝﹀皢鐨偆锛�" + skinID);
+		}
+		return "";
     }
 
 	/// <summary>
@@ -57,6 +107,6 @@
 	protected virtual void OnAnimationComplete(Spine.TrackEntry trackEntry)
 	{
 		onComplete?.Invoke();
-    }
+	}
 
 }
\ No newline at end of file

--
Gitblit v1.8.0