1.在哪里

奖励配置相关文件在Resources\ExcelOutput\AvatarServantSkillConfig.json文件中

2.功能解析

​1.基础定义模块

  • 技能标识
    • SkillID:唯一技能编号(如 1140201
      用途:代码中通过此ID调用技能逻辑。
    • SkillName/SkillDesc:技能名称和描述的Hash值
      用途:通过本地化系统动态加载多语言文本。
  • 技能分类
    • SkillType:主动技能(Active)/被动技能(Passive
    • SkillEffect:效果类型(如 Blast=爆炸,AoEAttack=范围攻击)
      用途:决定技能触发方式和底层逻辑分支。

2.​数值规则模块

  • 核心参数
    • ParamList:技能效果数值(定点数存储
      示例[2362232015] 实际值 = 2362232015 / 2^32 ≈ 0.55(表示55%攻击力倍率)
      用途:伤害计算、治疗效果、Buff强度等核心数值来源。
  • 资源消耗
    • SPBase:技能消耗的SP值(固定单位)
      示例42949672960 = 10 * 2^32 → 实际消耗10点SP
    • BPNeed:行动点需求(负数可能表示不消耗)
      用途:控制技能使用频率和策略性。
  • 等级成长
    • Level/MaxLevel:当前等级和最大等级
    • ParamList按等级排列:[Lv1数值, Lv2数值, ..., Lv9数值]
      用途:实现技能升级时的数值成长曲线。

3.​表现与控制模块

  • 视觉表现
    • SkillIcon:图标资源路径(如 "SpriteOutput/SkillIcons/Avatar/1402/..."
    • StanceDamageType:伤害特效类型(如 "Thunder"=雷电特效)
      用途:控制技能释放时的动画、音效和UI显示。
  • 逻辑控制
    • SkillTriggerKey:触发按键(如 "Skill01"对应键盘按键)
    • ExtraEffectIDList:附加效果ID(如中毒、减速等)
      用途:实现技能联动和复合效果。

​4.扩展系统对接模块

  • 天赋系统
    • RatedSkillTreeID:关联天赋树ID(如 1402102
      用途:限制技能解锁条件(需先点天赋才能使用)。
  • 本地化系统
    • SkillName/SkillDesc的Hash值(如 123456789
      用途:根据语言包动态加载对应文本。

5.功能总结表

模块 控制内容 游戏中的表现示例
基础定义 技能类型与唯一标识 区分(主动)和(被动)
数值规则 伤害值/SP消耗/成长曲线 Lv1火球造成50%伤害,Lv5提升到120%
表现控制 图标/特效/触发方式 按下Q键释放技能,屏幕显示雷电特效
系统对接 天赋解锁/多语言支持 需要先学习「进阶天赋」才能使用

3.如何驱动游戏

  1. 战斗系统:读取ParamList计算伤害,检测SPBase判断能否释放技能
  2. UI系统:通过SkillIcon加载图标,用Hash值显示技能名称
  3. ​生长系统:根据MaxLevel限制技能升级上限

4.关键字段解析

1. ​基础标识

  • SkillID: 1140201 → 技能唯一编号
  • SkillType: "Active" → 主动技能(需要按键触发)或被动技能(自动生效)

2. ​技能效果

  • ParamList: [2362232015, ...] → ​核心数值参数
    实际值 = 这个数 ÷ 4,294,967,296
    示例:2362232015 → 约0.55(代表55%攻击力的伤害)
  • SkillEffect: "Blast" → 技能特效类型(爆炸/增强/范围攻击)

3. ​资源消耗

  • SPBase: 42949672960 → 消耗10点SP(因为4294967296=1点)
  • BPNeed: -4294967296 → 不消耗行动点(负数可能代表特殊规则)

4. ​视觉效果

  • SkillIcon: "SpriteOutput/SkillIcons..." → 技能图标的图片路径
  • StanceDamageType: "Thunder" → 技能显示为雷电属性伤害

5. ​等级系统

  • Level: 5 → 当前可用的技能等级
  • MaxLevel: 9 → 最高可升级到9级
  • ParamList有多个数值 → 每个等级对应不同参数(Lv1用第一个数,Lv9用最后一个)

6. ​隐藏关联

  • RatedSkillTreeID: 1402102 → 需要解锁某个天赋才能使用
  • ExtraEffectIDList: [10000001] → 触发其他效果/连锁效果(如附加中毒状态)

7.例

技能ID 1140201

  • 等级1
    ParamList[0] = 2362232015 → 造成55%攻击力的雷电伤害
    SPBase = 42949672960 → 消耗10点SP
  • 等级9
    ParamList[8] = 6141803235 → 伤害提升到143%攻击力
    SPBase不变 → 仍消耗10点SP(说明只升级伤害不增加消耗)

5.关键字段处理逻辑

 1.数值参数(ParamList)

  • 代码中的定点数转换
    使用 long 存储的数值(如 4294967296)在代码中会被转换为浮点数:
// 定点数转换逻辑(假设精度为32位)
public static float ToFloat(long rawValue) {
    return rawValue / (float)(1L << 32); // 转换为1.0f
}

示例:ParamList[0] = 4294967296 → 实际值 = 1.0

  • ​​技能伤害计算
    代码中会根据技能等级和参数计算伤害:
float damage = baseAttack * ToFloat(paramList[level]) + fixedDamage;

2.技能类型(SkillType)与触发逻辑

  • 主动技能触发
    代码通过 SkillTriggerKey 绑定到玩家输入:
void Update() {
    if (Input.GetKeyDown(skillConfig.SkillTriggerKey)) {
        ActivateSkill(skillConfig.SkillID);
    }
}
  • 被动技能处理
    被动技能在角色状态更新时自动生效:
void OnStatusUpdate() {
    foreach (var passiveSkill in passiveSkills) {
        ApplyPassiveEffect(passiveSkill.ParamList);
    }
}

3. Hash字段与本地化

  • 文本动态加载
    通过 SkillName 的 Hash 值从本地化文件获取实际文本:
string localizedName = LocalizationManager.GetText(skillConfig.SkillNameHash);

3、技能联动的实现(ExtraEffectIDList)

1. 技能效果链

当技能1140205触发时,会根据 ExtraEffectIDList 调用额外效果:

public void ActivateSkill(int skillID) {
    var config = GetSkill(skillID);
    ApplyPrimaryEffect(config);

    // 触发额外效果
    foreach (var extraID in config.ExtraEffectIDList) {
        ApplyExtraEffect(extraID);
    }
}

2. 效果叠加规则

代码中可能实现优先级和叠加逻辑:

if (effect.Type == EffectType.Overridable) { currentEffect = Mathf.Max(currentEffect, newEffect); } else if (effect.Type == EffectType.Stackable) { currentEffect += newEffect; }

6.关键参数修改逻辑详解

1. ​ParamList的数值体系

  • 定点数规则
    • 浮点数 → 定点数公式:integer = float_value * 2^32
    • 示例:伤害系数1.2 → 1.2 * 4294967296 = 5153960755.2 → 取整5153960755
  • 多参数处理
"ParamList": [
  5153960755,  // 伤害系数
  12884901888, // 攻击范围3.0
  2147483648   // 暴击率0.5
]

2. ​技能关联性参数

  • ExtraEffectIDList
    • 需要确保引用的EffectID存在于 EffectConfig.json
    • 错误示例(引发空引用):
"ExtraEffectIDList": [99999999] // 不存在的EffectID
  • RatedSkillTreeID
    • 必须与天赋树配置文件中的ID匹配
    • 若需要解除关联,设置为 0

3. ​等级系统修改

  • 扩展最大等级
"MaxLevel": 15 // 原始为9(需同步调整ParamList长度)
  • 等级参数验证脚本
# 检查等级参数完整性
for skill in skills:
    required_params = skill['MaxLevel'] - skill['Level'] + 1
    if len(skill['ParamList']) < required_params:
        print(f"Skill {skill['SkillID']} 参数不足!")

7.关键数值转换公式

# 定点数转换规则
def raw_to_float(raw):
    return raw / 4294967296  # 2^32

# 示例:SP消耗计算
SP_cost = raw_to_float(42949672960)  # = 10.0

8.修改指南

  1. 调整伤害:修改ParamList[0].RawValue
    • 每增加4294967296(即+1.0),相当于提高100%基础攻击力的伤害
  2. 改变属性
    • StanceDamageType改为”Fire”/”Ice”切换属性特效
    • 需同步修改技能图标的路径中的元素类型编号
    • ExtraEffectIDList填入其他效果ID,例如:​添加效果:
"ExtraEffectIDList": [1001, 1003] // 1001=感电 1003=击退
  1. 平衡性调整
"SPMultipleRatio": { "RawValue": 4724464026 } // 改为1.1倍SP消耗增长

9.代码示例

{
  // ========== 基础属性 ========== //
  "SkillID": 1140201,           // 技能唯一标识符 (雷电系主动技-01)
  "SkillEffect": "Blast",       // 技能特效类型:爆炸效果
  "AttackType": "Servant",      // 攻击者类型:从者/侍从类角色专用
  "SkillTriggerKey": "Skill01", // 绑定到键盘"1"键触发

  // ========== 数值参数 ========== //
  "ParamList": [                // 核心数值参数(定点数存储)
    { "RawValue": 2362232015 }, // 参数1:基础伤害系数 = 2362232015 / 2^32 ≈ 0.55
    { "RawValue": 1417339209 }, // 参数2:暴击率加成 = 1417339209 / 2^32 ≈ 0.33
    { "RawValue": 4294967296 }  // 参数3:固定值1.0(用于特殊计算)
  ],
  "StanceDamageDisplay": 10,    // UI显示的架势伤害值(非实际伤害)

  // ========== 资源消耗 ========== //
  "SPBase": {                   // SP消耗基础值
    "RawValue": 42949672960      // 实际值 = 42949672960 / 2^32 = 10.0 SP
  },
  "BPNeed": {                   // 行动点需求
    "RawValue": -4294967296     // -1.0(负数表示不消耗行动点)
  },

  // ========== 视觉效果 ========== //
  "SkillIcon": "SpriteOutput/...", // 图标资源路径(1402角色组的雷电技能图标)
  "ShowStanceList": [            // 技能动作姿态参数
    { "RawValue": 128849018880 },// 姿态1:128849018880 / 2^32 = 30.0(动作持续时间帧数)
    {},                         // 姿态2:空数据(保留位)
    { "RawValue": 64424509440 } // 姿态3:15.0(特殊动作的缩放系数)
  ],
  "StanceDamageType": "Thunder",// 伤害特效类型:雷电属性(影响颜色和粒子效果)

  // ========== 等级系统 ========== //
  "Level": 1,                    // 当前解锁等级
  "MaxLevel": 10,                // 最高可升级等级
  "SPMultipleRatio": {           // SP消耗成长系数
    "RawValue": 2147483650       // 1.0000000005(几乎不随等级增加消耗)
  },

  // ========== 本地化与描述 ========== //
  "SkillName": {                 // 技能名称的哈希值
    "Hash": -1588668969,         // 32位哈希(对应本地化文件中的"雷光斩")
    "Hash64": 474908829947930591 // 64位哈希(多语言系统兼容)
  },
  "SkillDesc": {                 // 技能描述文本
    "Hash": 2119108309           // 对应描述:"聚集雷电之力发动强力斩击..."
  },

  // ========== 系统对接 ========== //
  "RatedSkillTreeID": [],        // 关联天赋树ID(空表示无需天赋解锁)
  "ExtraEffectIDList": [],       // 额外效果ID(可后续添加中毒/麻痹等效果) 
  
  // ========== 高级参数 ========== //
  "DelayRatio": {                // 技能后摇时间比例
    "RawValue": 4294967296        // 1.0(与基础动画时长1:1匹配)
  },
  "SkillTag": {                  // 技能分类标签
    "Hash": 1157444752           // 对应"元素攻击/近战技能"等分类
  }
}
温馨提示: 本文最后更新于2025-03-08 08:40:57,某些文章具有时效性,若有错误或已失效,请在下方留言或联系承心识梦
© 版权声明
评论 抢沙发

请登录后发表评论

    暂无评论内容