瀏覽代碼

子弹物理设置

181404010226 6 月之前
父節點
當前提交
c50d4aa470
共有 3 個文件被更改,包括 61 次插入7 次删除
  1. 3 3
      assets/assets/Prefabs/Bullet.prefab
  2. 9 0
      assets/resources/data.meta
  3. 49 4
      assets/scripts/BallController.ts

+ 3 - 3
assets/assets/Prefabs/Bullet.prefab

@@ -205,7 +205,7 @@
       "__id__": 8
     },
     "tag": 3,
-    "_group": 1,
+    "_group": 8,
     "_density": 1,
     "_sensor": false,
     "_friction": 1,
@@ -234,10 +234,10 @@
     "__prefab": {
       "__id__": 10
     },
-    "enabledContactListener": false,
+    "enabledContactListener": true,
     "bullet": true,
     "awakeOnLoad": true,
-    "_group": 1,
+    "_group": 8,
     "_type": 2,
     "_allowSleep": false,
     "_gravityScale": 0,

+ 9 - 0
assets/resources/data.meta

@@ -0,0 +1,9 @@
+{
+  "ver": "1.2.0",
+  "importer": "directory",
+  "imported": true,
+  "uuid": "ef4a17cb-6a8b-4b5b-b249-055e308dbc79",
+  "files": [],
+  "subMetas": {},
+  "userData": {}
+}

+ 49 - 4
assets/scripts/BallController.ts

@@ -431,11 +431,35 @@ export class BallController extends Component {
             console.log('子弹预制体已设置:', this.bulletPrefab.name);
         }
         
-        // 查找Weapon节点
-        const weaponNode = blockNode.getChildByName('Weapon');
+        // 查找Weapon节点 - 递归查找,因为Weapon可能在B1子节点下
+        let weaponNode = this.findWeaponNode(blockNode);
+        
         if (!weaponNode) {
-            console.warn(`方块 ${blockNode.name} 没有Weapon子节点`);
-            return;
+            console.warn(`方块 ${blockNode.name} 没有找到Weapon子节点,创建一个`);
+            // 如果没有找到Weapon节点,在B1节点下创建一个
+            const b1Node = blockNode.getChildByName('B1');
+            if (b1Node) {
+                weaponNode = new Node('Weapon');
+                // 确保Weapon节点有UITransform组件
+                if (!weaponNode.getComponent(UITransform)) {
+                    weaponNode.addComponent(UITransform);
+                }
+                // 将Weapon添加到B1节点中
+                b1Node.addChild(weaponNode);
+                // 放置在B1中心
+                weaponNode.position = new Vec3(0, 0, 0);
+            } else {
+                // 如果连B1节点都没有,直接添加到方块根节点
+                weaponNode = new Node('Weapon');
+                // 确保Weapon节点有UITransform组件
+                if (!weaponNode.getComponent(UITransform)) {
+                    weaponNode.addComponent(UITransform);
+                }
+                // 将Weapon添加到方块中
+                blockNode.addChild(weaponNode);
+                // 放置在方块中心
+                weaponNode.position = new Vec3(0, 0, 0);
+            }
         } else {
             console.log(`找到方块 ${blockNode.name} 的Weapon子节点:`, weaponNode.name);
         }
@@ -469,6 +493,27 @@ export class BallController extends Component {
             }, 5); // 5秒后销毁子弹
         }
     }
+    
+    // 递归查找Weapon节点
+    private findWeaponNode(node: Node): Node | null {
+        // 先检查当前节点是否有Weapon子节点
+        const weaponNode = node.getChildByName('Weapon');
+        if (weaponNode) {
+            return weaponNode;
+        }
+        
+        // 如果没有,递归检查所有子节点
+        for (let i = 0; i < node.children.length; i++) {
+            const child = node.children[i];
+            const foundWeapon = this.findWeaponNode(child);
+            if (foundWeapon) {
+                return foundWeapon;
+            }
+        }
+        
+        // 如果都没找到,返回null
+        return null;
+    }
 
     // 获取节点的完整路径
     private getNodePath(node: Node): string {