|
|
@@ -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 {
|