woso_javan 2 сар өмнө
parent
commit
8dd43f6d9a

+ 2 - 2
assets/module_storm_sunder/Script/GameUtil.ts

@@ -213,12 +213,12 @@ export class GameUtil {
     }
 
     /** 3D空间坐标转屏幕坐标*/
-    static worldToScreenLocal(target: Node): Vec3 {
+    static worldToScreenLocal(target: Node, localNode: Node): Vec3 {
         const targetWorldPos = target.worldPosition.clone();
         const mainCamera = StormSunderGlobalInstance.instance.camera;
         const screenPos = mainCamera.worldToScreen(targetWorldPos);
         const uiPos = new Vec3();
-        StormSunderGlobalInstance.instance.effectUI.getComponent(UITransform)!.convertToNodeSpaceAR(
+        localNode.getComponent(UITransform)!.convertToNodeSpaceAR(
             new Vec3(screenPos.x, screenPos.y, 0),
             uiPos
         );

+ 13 - 11
assets/module_storm_sunder/Script/Manager/Effect2DUIMgr.ts

@@ -40,7 +40,8 @@ export class Effect2DUIMgr {
             return;
         }
 
-        const uiPos = GameUtil.worldToScreenLocal(target).clone();
+        const bloodUI = StormSunderGlobalInstance.instance.bloodUI;
+        const uiPos = GameUtil.worldToScreenLocal(target, bloodUI).clone();
         // 设置位置偏移
         const offsetY = 200;
         const offsetX = 100;
@@ -55,21 +56,20 @@ export class Effect2DUIMgr {
 
     /** 龙卷风添加信息预设*/
     async addPlayerInfo(target: Node, playerInfo: PlayerInfo) {
+        const effectUI = StormSunderGlobalInstance.instance.effectUI;
+
         // 1. 使用占位符防止重复创建
         if (this.playerInfoMap.has(target)) {
             const existing = this.playerInfoMap.get(target);
             if (existing instanceof Node) {
-                // 已有节点直接更新位置
-                const uiPos = GameUtil.worldToScreenLocal(target);
-                const offsetY = 250;
-                const offsetX = 70;
-                existing.setPosition(uiPos.x + offsetX, uiPos.y + offsetY);
+                this.setPlayerInfoPosition(existing, target, effectUI);
             }
             return; // 正在加载或已存在
         }
 
         // 2. 设置加载占位符
         this.playerInfoMap.set(target, null);
+
         try {
             const infoPrefab = await resLoader.loadAsync(
                 resLoader.gameBundleName,
@@ -78,15 +78,12 @@ export class Effect2DUIMgr {
             );
 
             const infoNode = instantiate(infoPrefab);
-            infoNode.parent = StormSunderGlobalInstance.instance.effectUI;
+            infoNode.parent = effectUI;
 
             const playerInfoComp = infoNode.getComponent(PlayerInfoComponent);
             playerInfoComp?.updateInfo(playerInfo);
 
-            const uiPos = GameUtil.worldToScreenLocal(target);
-            const offsetY = 250;
-            const offsetX = 70;
-            infoNode.setPosition(uiPos.x + offsetX, uiPos.y + offsetY);
+            this.setPlayerInfoPosition(infoNode, target, effectUI);
             this.playerInfoMap.set(target, infoNode);
         } catch (error) {
             // 异常处理:移除占位符允许重试
@@ -95,6 +92,11 @@ export class Effect2DUIMgr {
         }
     }
 
+    private setPlayerInfoPosition(infoNode: Node, target: Node, parentUI: Node) {
+        const uiPos = GameUtil.worldToScreenLocal(target, parentUI);
+        infoNode.setPosition(uiPos.x + 70, uiPos.y + 250);
+    }
+
     //更新对应玩家信息
     updatePlayerInfo(target: Node, playerInfo: PlayerInfo) {
         const infoNode = this.playerInfoMap.get(target);

+ 1 - 1
assets/module_storm_sunder/rooster_stormsunder.scene

@@ -4404,7 +4404,7 @@
       "__id__": 169
     },
     "_children": [],
-    "_active": false,
+    "_active": true,
     "_components": [
       {
         "__id__": 184