using System.Collections.Generic; using Animancer; using Animancer.TransitionLibraries; using Fort23.Core; using Fort23.UTool; using GameLogic.Hero; using UnityEngine; using UnityEngine.AI; namespace Fort23.Mono { [UIBinding(prefab = "HeroInformationPanel")] public partial class HeroInformationPanel : UIPanel { private GameObjectPool modelObj; List HeroAttributeWidgets = new List(); private HeroInfo heroInfo; private void Init() { } protected override void AddEvent() { } protected override void DelEvent() { } public override void AddButtonEvent() { Btn_TuPo.onClick.AddListener(() => { if (PlayerManager.Instance.myHero.powerUpConfig.jingjie1 == heroInfo.powerUpConfig.jingjie1) { //小突破 if (PlayerManager.Instance.myHero.powerUpConfig.jingjie2 == heroInfo.powerUpConfig.jingjie2) { PlayerManager.Instance.myHero.Upgrade(); CustomInit(); } //大突破 else { PlayerManager.Instance.myHero.Upgrade(); CustomInit(); } } }); Btn_Close.onClick.AddListener(() => { UIManager.Instance.HideUIUIPanel(this); }); } public async CTask CustomInit() { ClosePool(); await CreatHero(); heroInfo = new HeroInfo(); heroInfo.InitHero(PlayerManager.Instance.myHero.heroData.heroModelId, PlayerManager.Instance.myHero.heroData.heroPowerId + 1); HeroAttributeWidget heroAttributeWidget = await UIManager.Instance.CreateGComponent(null, AttributeRoot); heroAttributeWidget.CustomInit("生命", PlayerManager.Instance.myHero.hp.Value.ToString(), "+" + (heroInfo.hp.Value - PlayerManager.Instance.myHero.hp.Value).ToString()); HeroAttributeWidgets.Add(heroAttributeWidget); heroAttributeWidget = await UIManager.Instance.CreateGComponent(null, AttributeRoot); heroAttributeWidget.CustomInit("攻击", PlayerManager.Instance.myHero.attack.Value.ToString(), "+" + (heroInfo.attack.Value - PlayerManager.Instance.myHero.attack.Value).ToString()); HeroAttributeWidgets.Add(heroAttributeWidget); heroAttributeWidget = await UIManager.Instance.CreateGComponent(null, AttributeRoot); heroAttributeWidget.CustomInit("防御", PlayerManager.Instance.myHero.defense.Value.ToString(), "+" + (heroInfo.defense.Value - PlayerManager.Instance.myHero.defense.Value).ToString()); HeroAttributeWidgets.Add(heroAttributeWidget); Slider_Exp.maxValue = PlayerManager.Instance.myHero.powerUpConfig.levelUpExp; Slider_Exp.value = PlayerManager.Instance.myHero.exp.Value; // // heroAttributeWidget = await UIManager.Instance.CreateGComponent(null, AttributeRoot); // heroAttributeWidget.CustomInit("生命", PlayerManager.Instance.myHero.hp.Value.ToString(), (heroInfo.hp.Value - PlayerManager.Instance.myHero.hp.Value).ToString()); // HeroAttributeWidgets.Add(heroAttributeWidget); Text_Level.text = $"LV{PlayerManager.Instance.myHero.level}"; Text_exp.text = $"{PlayerManager.Instance.myHero.exp}/{PlayerManager.Instance.myHero.powerUpConfig.levelUpExp}"; } private async CTask CreatHero() { modelObj = await GObjectPool.Instance.FetchAsync(PlayerManager.Instance.myHero.modelConfig.model + ".prefab", null); modelObj.own.transform.parent = HeroRoot; modelObj.own.transform.localEulerAngles = new Vector3(0, 180, 0); modelObj.own.transform.localPosition = new Vector3(0, -132, 0); modelObj.own.transform.localScale = Vector3.one * 330; ChangeLayerRecursively(modelObj.own, LayerMask.NameToLayer("UI")); var modelAnimComponent = modelObj.own.GetComponent(); int max = modelAnimComponent.Transitions.Library.Count; for (int i = 0; i < max; i++) { if (modelAnimComponent.Transitions.Library.TryGetTransition(i, out TransitionModifierGroup transition)) { var modelIdleClip = transition.Transition as TransitionAsset; if (modelIdleClip != null && modelIdleClip.name == "idle") { modelAnimComponent.Play(modelIdleClip); break; } } } } public void ChangeLayerRecursively(GameObject obj, int newLayer) { if (obj == null || obj.layer == newLayer) return; // 修改当前对象的 Layer obj.layer = newLayer; // 遍历所有子对象,递归修改 foreach (Transform child in obj.transform) { ChangeLayerRecursively(child.gameObject, newLayer); } } public async static void OpenPanel() { HeroInformationPanel heroInformationPanel = await UIManager.Instance.LoadAndOpenPanel(null); heroInformationPanel.CustomInit(); } public override void Close() { ClosePool(); base.Close(); } private void ClosePool() { UIManager.Instance.DormancyGComponent(modelObj); modelObj = null; foreach (var heroAttributeWidget in HeroAttributeWidgets) { UIManager.Instance.DormancyGComponent(heroAttributeWidget); } HeroAttributeWidgets.Clear(); } } }