SkillConfigSystem.md 5.2 KB

技能配置系统使用说明

概述

技能配置系统允许通过JSON配置文件来管理技能节点的数值和钻石消耗,而不是在代码中硬编码这些数值。这使得游戏平衡调整变得更加灵活和方便。

文件结构

assets/
├── resources/
│   └── data/
│       └── skill_config.json          # 技能配置文件
└── scripts/
    └── FourUI/
        └── SkillSystem/
            ├── SkillConfigManager.ts   # 技能配置管理器
            ├── SkillNodeGenerator.ts   # 技能节点生成器(已修改)
            └── PersistentSkillManager.ts # 持久化技能管理器(已修改)

配置文件格式

skill_config.json

{
  "skillTypes": [
    {
      "id": 0,
      "name": "Damage",
      "displayName": "伤害",
      "nameTemplate": "Damage +{}%",
      "type": "damage"
    },
    {
      "id": 1,
      "name": "Ball Speed",
      "displayName": "球速",
      "nameTemplate": "Ball Speed +{}%",
      "type": "ball_speed"
    },
    {
      "id": 2,
      "name": "Crit Damage",
      "displayName": "暴击伤害",
      "nameTemplate": "Crit Damage +{}%",
      "type": "crit_damage"
    }
  ],
  "skillGroups": [
    {
      "group": 1,
      "effectPercent": 5,
      "diamondCost": 10
    },
    {
      "group": 2,
      "effectPercent": 10,
      "diamondCost": 20
    }
    // ... 更多组配置
  ],
  "totalGroups": 12,
  "skillsPerGroup": 3
}

配置字段说明

skillTypes(技能类型配置)

  • id: 技能类型ID(对应skillIndex)
  • name: 技能英文名称
  • displayName: 技能中文显示名称
  • nameTemplate: 技能名称模板,{}会被替换为效果百分比
  • type: 技能类型标识符(用于内部逻辑)

skillGroups(技能组配置)

  • group: 技能组编号(1-12)
  • effectPercent: 该组技能的效果百分比
  • diamondCost: 解锁该组技能需要的钻石数量

全局配置

  • totalGroups: 总技能组数
  • skillsPerGroup: 每组技能数量

核心类说明

SkillConfigManager

技能配置管理器,负责加载和管理JSON配置数据。

主要方法:

  • getInstance(): 获取单例实例
  • getSkillConfig(): 获取完整配置
  • getSkillName(skillIndex, group): 获取技能名称
  • getSkillCost(group): 获取技能消耗
  • getSkillEffectPercent(group): 获取技能效果百分比
  • waitForLoad(): 等待配置加载完成

修改的现有类

SkillNodeGenerator

  • 现在从SkillConfigManager加载技能配置
  • 支持动态的技能组数和每组技能数
  • 自动等待配置加载完成

PersistentSkillManager

  • 技能消耗计算现在使用配置数据
  • 技能显示名称从配置获取
  • 保持向后兼容性

使用方法

1. 修改技能配置

编辑 assets/resources/config/skill_config.json 文件:

{
  "skillGroups": [
    {
      "group": 1,
      "effectPercent": 8,     // 修改效果百分比
      "diamondCost": 15       // 修改钻石消耗
    }
  ]
}

2. 添加新技能类型

skillTypes 数组中添加新的技能类型:

{
  "id": 3,
  "name": "Attack Speed",
  "displayName": "攻击速度",
  "nameTemplate": "Attack Speed +{}%",
  "type": "attack_speed"
}

3. 调整技能组数量

修改 totalGroups 和相应的 skillGroups 数组:

{
  "totalGroups": 15,  // 增加到15组
  "skillGroups": [
    // 添加第13-15组的配置
    {
      "group": 13,
      "effectPercent": 65,
      "diamondCost": 130
    }
  ]
}

测试

使用 SkillConfigTest 脚本来验证配置系统是否正常工作:

  1. SkillConfigTest 组件添加到场景中的节点
  2. 运行场景查看控制台输出
  3. 检查所有测试是否通过

注意事项

  1. 配置加载是异步的:确保在使用配置数据前调用 waitForLoad()
  2. 向后兼容性:如果JSON加载失败,系统会使用默认配置
  3. 技能索引:技能索引(0, 1, 2)对应预制体数组的顺序
  4. 组编号:技能组编号从1开始,不是从0开始
  5. 配置验证:系统会验证配置的完整性,缺失的配置会使用默认值

优势

  1. 灵活性:无需修改代码即可调整技能数值
  2. 可维护性:配置集中管理,易于维护
  3. 扩展性:容易添加新的技能类型和组
  4. 测试友好:可以快速测试不同的数值配置
  5. 版本控制:配置文件可以独立进行版本控制

故障排除

常见问题

  1. 配置加载失败

    • 检查JSON文件格式是否正确
    • 确保文件路径为 resources/config/skill_config.json
    • 查看控制台错误信息
  2. 技能显示异常

    • 检查 skillTypes 配置是否完整
    • 确保 nameTemplate 包含 {} 占位符
    • 验证 skillGroups 配置是否包含所需的组
  3. 钻石消耗不正确

    • 检查 skillGroups 中的 diamondCost 配置
    • 确保组编号连续且从1开始

调试技巧

  1. 使用 SkillConfigTest 脚本进行全面测试
  2. 检查控制台日志了解配置加载状态
  3. 在浏览器开发者工具中检查JSON文件是否正确加载
  4. 使用断点调试配置管理器的方法调用