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