181404010226 78c7377ae9 250624 5 月之前
..
QuickTestSetup.md 78c7377ae9 250624 5 月之前
QuickTestSetup.md.meta 78c7377ae9 250624 5 月之前
README.md 78c7377ae9 250624 5 月之前
README.md.meta 78c7377ae9 250624 5 月之前
ResourceMapping.md 78c7377ae9 250624 5 月之前
ResourceMapping.md.meta 78c7377ae9 250624 5 月之前
TestGuide.md 78c7377ae9 250624 5 月之前
TestGuide.md.meta 78c7377ae9 250624 5 月之前
TestSetupGuide.md 78c7377ae9 250624 5 月之前
TestSetupGuide.md.meta 78c7377ae9 250624 5 月之前
enemies.json 78c7377ae9 250624 5 月之前
enemies.json.meta 78c7377ae9 250624 5 月之前
weapons.json 78c7377ae9 250624 5 月之前
weapons.json.meta 78c7377ae9 250624 5 月之前

README.md

武器和敌人配置系统使用说明

概述

本系统提供了完整的武器和敌人配置管理功能,通过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% 权重

武器配置结构

{
  "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. 初始化配置管理器

// 在场景中添加ConfigManager组件
const configManager = ConfigManager.getInstance();

// 检查配置是否加载完成
if (configManager.isConfigLoaded()) {
    // 配置已加载,可以使用
}

2. 获取武器配置

// 获取随机武器
const randomWeapon = configManager.getRandomWeapon();

// 获取指定稀有度的武器
const rareWeapon = configManager.getRandomWeapon('rare');

// 根据ID获取武器
const specificWeapon = configManager.getWeaponById('pea_shooter');

// 获取所有武器
const allWeapons = configManager.getAllWeapons();

3. 获取敌人配置

// 获取随机敌人
const randomEnemy = configManager.getRandomEnemy();

// 获取指定稀有度的敌人
const bossEnemy = configManager.getRandomEnemy('boss');

// 根据波次获取合适的敌人
const waveEnemy = configManager.getEnemyForWave(10);

// 根据ID获取敌人
const specificEnemy = configManager.getEnemyById('normal_zombie');

4. 创建武器方块

// 使用WeaponBlockExample创建武器方块
const weaponBlockExample = this.getComponent(WeaponBlockExample);

// 创建指定ID的武器方块
weaponBlockExample.createWeaponBlockById('pea_shooter', position);

// 获取方块的武器配置
const weaponConfig = WeaponBlockExample.getBlockWeaponConfig(blockNode);

5. 生成敌人

// 使用EnemySpawnerExample生成敌人
const enemySpawner = this.getComponent(EnemySpawnerExample);

// 生成指定类型的敌人
enemySpawner.spawnEnemyByType('normal_zombie');

// 生成指定稀有度的敌人
enemySpawner.spawnEnemyByRarity('boss');

// 设置当前波次
enemySpawner.setCurrentWave(15);

集成到现有系统

在BlockManager中集成武器系统

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中集成敌人系统

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提供了多种调试方法:

// 检查配置加载状态
console.log('配置加载状态:', configManager.isConfigLoaded());

// 查看所有武器数量
console.log('武器总数:', configManager.getAllWeapons().length);

// 查看指定稀有度的武器数量
console.log('史诗武器数量:', configManager.getWeaponsByRarity('epic').length);

// 查看所有敌人数量
console.log('敌人总数:', configManager.getAllEnemies().length);

通过这个配置系统,你可以轻松地管理游戏中的武器和敌人,实现丰富的游戏内容和平衡性调整。