# 武器和敌人配置系统使用说明 ## 概述 本系统提供了完整的武器和敌人配置管理功能,通过JSON文件配置游戏中的武器和敌人类型,支持随机生成、权重分配、稀有度系统等功能。 ## 文件结构 ``` assets/ ├── data/ │ ├── weapons.json # 武器配置文件 │ ├── enemies.json # 敌人配置文件 │ └── README.md # 本说明文档 └── scripts/ ├── ConfigManager.ts # 配置管理器 ├── WeaponBlockExample.ts # 武器方块示例 └── EnemySpawnerExample.ts # 敌人生成器示例 ``` ## 武器配置系统 ### 武器类型 根据 `WeaponNeed.txt` 设计了以下8种武器类型: 1. **毛豆射手** (`pea_shooter`) - 单发射击 2. **尖胡萝卜** (`sharp_carrot`) - 穿透攻击 3. **锯齿草** (`saw_grass`) - 弹射+穿透 4. **西瓜炸弹** (`watermelon_bomb`) - 爆炸伤害 5. **回旋镖盆栽** (`boomerang_plant`) - 弧线穿透 6. **炙热辣椒** (`hot_pepper`) - 范围灼烧 7. **仙人散弹** (`cactus_shotgun`) - 散射攻击 8. **秋葵导弹** (`okra_missile`) - 制导导弹 ### 稀有度系统 - **Common (普通)** - 60% 权重 - **Uncommon (不常见)** - 25% 权重 - **Rare (稀有)** - 12% 权重 - **Epic (史诗)** - 3% 权重 ### 武器配置结构 ```json { "id": "weapon_id", "name": "武器名称", "type": "武器类型", "rarity": "稀有度", "weight": 权重值, "stats": { "damage": 伤害值, "fireRate": 射速, "range": 射程, "bulletSpeed": 子弹速度, "penetration": 穿透数, "accuracy": 精准度 }, "bulletConfig": { "bulletType": "子弹类型", "bulletPrefab": "子弹预制体路径", "hitEffect": "命中特效路径" }, "attackPattern": { "type": "攻击模式", "projectileCount": 投射物数量, "spreadAngle": 散射角度 }, "visualConfig": { "weaponSprites": { "1x1": "1x1尺寸图标路径", "1x2": "1x2尺寸图标路径", "2x1": "2x1尺寸图标路径", "2x2": "2x2尺寸图标路径" }, "muzzleFlash": "枪口闪光特效", "fireSound": "射击音效" } } ``` ## 敌人配置系统 ### 敌人类型 根据 `EnemyNeed.txt` 设计了以下12种敌人类型: 1. **普通僵尸** (`normal_zombie`) - 基础敌人 2. **路障僵尸** (`roadblock_zombie`) - 装甲敌人 3. **漫步僵尸** (`wandering_zombie`) - 摇摆移动 4. **法师僵尸** (`mage_zombie`) - 远程法术 5. **弓箭僵尸** (`archer_zombie`) - 远程射击 6. **隐身僵尸** (`stealth_zombie`) - 隐身能力 7. **铁桶僵尸** (`bucket_zombie`) - 重装甲 8. **火药桶僵尸** (`barrel_zombie`) - 死亡爆炸 9. **BOSS1** (`boss1_gatekeeper`) - 铁栅门BOSS 10. **BOSS2** (`boss2_gravedigger`) - 墓碑BOSS 11. **BOSS3** (`boss3_cyborg`) - 机械臂BOSS ### 敌人稀有度 - **Common (普通)** - 70% 权重 - **Uncommon (不常见)** - 20% 权重 - **Rare (稀有)** - 8% 权重 - **Boss (BOSS)** - 2% 权重 ### 波次进展系统 - **早期波次 (1-5波)**: 普通僵尸、路障僵尸 - **中期波次 (6-15波)**: 漫步僵尸、法师僵尸、弓箭僵尸 - **后期波次 (16-25波)**: 隐身僵尸、铁桶僵尸、火药桶僵尸 - **BOSS波次 (26+波)**: 各种BOSS ## 使用方法 ### 1. 初始化配置管理器 ```typescript // 在场景中添加ConfigManager组件 const configManager = ConfigManager.getInstance(); // 检查配置是否加载完成 if (configManager.isConfigLoaded()) { // 配置已加载,可以使用 } ``` ### 2. 获取武器配置 ```typescript // 获取随机武器 const randomWeapon = configManager.getRandomWeapon(); // 获取指定稀有度的武器 const rareWeapon = configManager.getRandomWeapon('rare'); // 根据ID获取武器 const specificWeapon = configManager.getWeaponById('pea_shooter'); // 获取所有武器 const allWeapons = configManager.getAllWeapons(); ``` ### 3. 获取敌人配置 ```typescript // 获取随机敌人 const randomEnemy = configManager.getRandomEnemy(); // 获取指定稀有度的敌人 const bossEnemy = configManager.getRandomEnemy('boss'); // 根据波次获取合适的敌人 const waveEnemy = configManager.getEnemyForWave(10); // 根据ID获取敌人 const specificEnemy = configManager.getEnemyById('normal_zombie'); ``` ### 4. 创建武器方块 ```typescript // 使用WeaponBlockExample创建武器方块 const weaponBlockExample = this.getComponent(WeaponBlockExample); // 创建指定ID的武器方块 weaponBlockExample.createWeaponBlockById('pea_shooter', position); // 获取方块的武器配置 const weaponConfig = WeaponBlockExample.getBlockWeaponConfig(blockNode); ``` ### 5. 生成敌人 ```typescript // 使用EnemySpawnerExample生成敌人 const enemySpawner = this.getComponent(EnemySpawnerExample); // 生成指定类型的敌人 enemySpawner.spawnEnemyByType('normal_zombie'); // 生成指定稀有度的敌人 enemySpawner.spawnEnemyByRarity('boss'); // 设置当前波次 enemySpawner.setCurrentWave(15); ``` ## 集成到现有系统 ### 在BlockManager中集成武器系统 ```typescript import { ConfigManager, WeaponConfig } from './ConfigManager'; // 在generateRandomBlock方法中使用武器配置 private generateRandomBlock(): Node { const configManager = ConfigManager.getInstance(); const weaponConfig = configManager.getRandomWeapon(); if (weaponConfig) { const block = this.createBlockWithWeapon(weaponConfig); return block; } return this.createDefaultBlock(); } // 创建带武器配置的方块 private createBlockWithWeapon(weaponConfig: WeaponConfig): Node { const blockNode = instantiate(this.blockPrefab); // 添加武器组件 const weaponComponent = blockNode.addComponent('WeaponComponent'); weaponComponent.weaponConfig = weaponConfig; // 设置方块外观 this.setupBlockVisual(blockNode, weaponConfig); return blockNode; } ``` ### 在EnemyManager中集成敌人系统 ```typescript import { ConfigManager, EnemyConfig } from './ConfigManager'; // 在生成敌人时使用配置 public spawnEnemy(waveNumber: number): Node { const configManager = ConfigManager.getInstance(); const enemyConfig = configManager.getEnemyForWave(waveNumber); if (enemyConfig) { const enemy = this.createEnemyWithConfig(enemyConfig); return enemy; } return this.createDefaultEnemy(); } // 创建带配置的敌人 private createEnemyWithConfig(enemyConfig: EnemyConfig): Node { const enemyNode = instantiate(this.enemyPrefab); // 添加敌人组件 const enemyComponent = enemyNode.addComponent('EnemyComponent'); enemyComponent.enemyConfig = enemyConfig; // 设置敌人属性 this.setupEnemyStats(enemyNode, enemyConfig); return enemyNode; } ``` ## 扩展配置 ### 添加新武器 1. 在 `weapons.json` 中添加新的武器配置 2. 确保设置正确的权重和稀有度 3. 准备相应的资源文件(图标、音效等) ### 添加新敌人 1. 在 `enemies.json` 中添加新的敌人配置 2. 在 `waveProgression` 中配置敌人出现的波次 3. 准备相应的资源文件(模型、动画等) ## 注意事项 1. **资源路径**: 确保JSON中配置的资源路径与实际文件路径匹配 2. **权重平衡**: 调整权重值以控制各种武器/敌人的出现频率 3. **性能优化**: 大量实例化时注意对象池的使用 4. **数据验证**: 在生产环境中添加配置数据的验证逻辑 ## 调试功能 ConfigManager提供了多种调试方法: ```typescript // 检查配置加载状态 console.log('配置加载状态:', configManager.isConfigLoaded()); // 查看所有武器数量 console.log('武器总数:', configManager.getAllWeapons().length); // 查看指定稀有度的武器数量 console.log('史诗武器数量:', configManager.getWeaponsByRarity('epic').length); // 查看所有敌人数量 console.log('敌人总数:', configManager.getAllEnemies().length); ``` 通过这个配置系统,你可以轻松地管理游戏中的武器和敌人,实现丰富的游戏内容和平衡性调整。