From 3f2cd27c5dfb3b450245bf1a37fc1b3414031c7c Mon Sep 17 00:00:00 2001
From: yyl <yyl>
Date: 星期三, 11 二月 2026 11:03:58 +0800
Subject: [PATCH] 小游戏适配 资源系统改造

---
 Main/System/Hero/UIHeroController.cs |  138 ++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 138 insertions(+), 0 deletions(-)

diff --git a/Main/System/Hero/UIHeroController.cs b/Main/System/Hero/UIHeroController.cs
index dd7ae75..c60a66c 100644
--- a/Main/System/Hero/UIHeroController.cs
+++ b/Main/System/Hero/UIHeroController.cs
@@ -1,5 +1,6 @@
 
 using System;
+using Cysharp.Threading.Tasks;
 using Spine.Unity;
 using UnityEngine;
 using UnityEngine.UI;
@@ -150,6 +151,143 @@
 		spineAnimationState.Complete += OnAnimationComplete;
 	}
 
+	public async UniTask CreateAsync(int _skinID, float scale = 0.8f, Action _onComplete = null, string motionName = "idle", bool isLh = false)
+	{
+		if (skinID == _skinID)
+		{
+			//閬垮厤閲嶅鍒涘缓
+
+			if (skeletonGraphic != null)
+			{
+				SetMaterialNone();
+				if (isLh)
+				{
+					var skinConfigTmp = HeroSkinConfig.Get(skinID);
+					if (skinConfigTmp != null && skinConfigTmp.Tachie.Contains("SkeletonData"))
+					{
+						skeletonGraphic.enabled = true;
+					}
+				}
+				else
+				{
+					skeletonGraphic.enabled = true;
+				}
+			}
+			return;
+		}
+
+		skinID = _skinID;
+		var skinConfig = HeroSkinConfig.Get(skinID);
+		if (isLh)
+		{
+
+			//X杞村亸绉伙紝Y杞村亸绉伙紝缂╂斁锛屾槸鍚︽按骞崇炕杞紙0鍚�1鏄級
+			if (skinConfig.TachieParam.Length == 4)
+			{
+				this.transform.localPosition = new Vector3(skinConfig.TachieParam[0], skinConfig.TachieParam[1], 0);
+				this.transform.localScale = Vector3.one * skinConfig.TachieParam[2];
+				this.transform.localRotation = Quaternion.Euler(0, skinConfig.TachieParam[3] == 0 ? 0 : 180, 0);
+			}
+			else
+			{
+				this.transform.localPosition = Vector3.zero;
+				this.transform.localScale = Vector3.one;
+				this.transform.localRotation = Quaternion.identity;
+			}
+
+			//绔嬬粯鐗规畩澶勭悊锛屾病鏈塻pine鍔ㄧ敾鐨勬敼鐢ㄥ浘鐗�
+			var lhImg = this.AddMissingComponent<RawImage>();
+			if (!skinConfig.Tachie.Contains("SkeletonData"))
+			{
+				//鍥剧墖鏇挎崲
+				lhImg.SetTexture2DPNG(skinConfig.Tachie);
+				lhImg.SetNativeSize();
+				if (skeletonGraphic != null)
+				{
+					skeletonGraphic.enabled = false;
+				}
+				lhImg.enabled = true;
+				lhImg.raycastTarget = false;
+				return;
+			}
+			else
+			{
+				if (skeletonGraphic != null)
+				{
+					skeletonGraphic.enabled = true;
+				}
+				lhImg.enabled = false;
+			}
+		}
+		else
+		{
+			this.transform.localScale = Vector3.one * scale;
+		}
+
+		onComplete = _onComplete;
+		pool = GameObjectPoolManager.Instance.GetPool(await UILoader.LoadPrefabAsync("UIHero"));
+		if (this == null) return;
+
+		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);
+		if (isLh)
+		{
+			skeletonGraphic.skeletonDataAsset = ResManager.Instance.LoadAsset<SkeletonDataAsset>("Hero/SpineRes/", skinConfig.Tachie);
+		}
+		else
+		{
+			skeletonGraphic.skeletonDataAsset = ResManager.Instance.LoadAsset<SkeletonDataAsset>("Hero/SpineRes/", skinConfig.SpineRes);
+		}
+		if (skeletonGraphic.skeletonDataAsset == null)
+		{
+
+			transform.SetActive(false);
+			if (pool != null)
+				pool.Release(instanceGO);
+			skeletonGraphic = null;
+			Destroy(instanceGO);
+			Debug.LogError("鏈厤缃畇pine");
+			return;
+		}
+		skeletonGraphic.initialSkinName = skinConfig.InitialSkinName;
+		skeletonGraphic.Initialize(true);
+		// 鍒濆鍖栧畬鎴愬悗璁剧疆鐨偆
+		if (!string.IsNullOrEmpty(skinConfig.InitialSkinName))
+		{
+			var skeleton = skeletonGraphic.Skeleton;
+			skeleton.SetSkin(skinConfig.InitialSkinName);
+			skeleton.SetSlotsToSetupPose();
+			skeletonGraphic.Update(0);
+		}
+
+		skeletonGraphic.enabled = true;
+		SetMaterialNone();
+
+		spineAnimationState = skeletonGraphic.AnimationState;
+		spineAnimationState.Data.DefaultMix = 0f;
+		if (motionName == "")
+			motionName = GetFistSpineAnim();
+
+		PlayAnimation(motionName, true);
+		spineAnimationState.Complete -= OnAnimationComplete;
+		spineAnimationState.Complete += OnAnimationComplete;
+	}
+
 
 
 

--
Gitblit v1.8.0