From 2917e8a4eae31c1a1bc4419a9b6f23be7e4fda3e Mon Sep 17 00:00:00 2001
From: yyl <yyl>
Date: 星期二, 05 八月 2025 19:24:50 +0800
Subject: [PATCH] update team heros
---
Main/System/Hero/UIHeroController.cs | 90 +++++++++++++++++++++++++++++----------------
1 files changed, 58 insertions(+), 32 deletions(-)
diff --git a/Main/System/Hero/UIHeroController.cs b/Main/System/Hero/UIHeroController.cs
index 241063a..20fd6af 100644
--- a/Main/System/Hero/UIHeroController.cs
+++ b/Main/System/Hero/UIHeroController.cs
@@ -6,50 +6,76 @@
using UnityEngine.EventSystems;
public class UIHeroController : MonoBehaviour
{
- public void Create(int _skinID, float scale = 1f, Action _onComplete = null)
- {
- skinID = _skinID;
- onComplete = _onComplete;
- GameObject battleGO = UILoader.LoadPrefab("UIHero");
- 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);
- this.transform.localScale = Vector3.one * scale;
- 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)
{
+ 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);
+ 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;
+ PlayAnimation(MotionName.idle, 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(MotionName motionName, bool loop = false)
+ {
+ if (spineAnimationState == null) return;
+
+ // 鐩存帴浣跨敤 ToString() 鑰屼笉鏄皟鐢� GetAnimationName
+ spineAnimationState.SetAnimation(0, motionName.ToString(), loop);
}
/// <summary>
--
Gitblit v1.8.0