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点SPBPNeed
:行动点需求(负数可能表示不消耗)
用途:控制技能使用频率和策略性。
- 等级成长
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.如何驱动游戏
- 战斗系统:读取
ParamList
计算伤害,检测SPBase
判断能否释放技能 - UI系统:通过
SkillIcon
加载图标,用Hash
值显示技能名称 - 生长系统:根据
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
- 错误示例(引发空引用):
- 需要确保引用的EffectID存在于
"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.修改指南
- 调整伤害:修改
ParamList[0].RawValue
- 每增加
4294967296
(即+1.0),相当于提高100%基础攻击力的伤害
- 每增加
- 改变属性:
StanceDamageType
改为”Fire”/”Ice”切换属性特效- 需同步修改技能图标的路径中的元素类型编号
- 在
ExtraEffectIDList
填入其他效果ID,例如:添加效果:
"ExtraEffectIDList": [1001, 1003] // 1001=感电 1003=击退
- 平衡性调整:
"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 // 对应"元素攻击/近战技能"等分类
}
}
© 版权声明
文章版权归作者所有,未经允许请勿转载。
暂无评论内容