外观
技能素材配置:skillMagic.json
skillMagic.json 定义客户端技能的起手、飞行和命中特效,随客户端配置包发布。顶层是 JSON 数组,每个对象定义一个技能的素材表现。
怪物攻击填写的 EffectId 对应这里的 effectID。不同攻击可以复用同一条表现配置;攻击伤害、范围和命中判定由服务端各攻击独立配置,客户端只负责播放。
落点特效
适用于冰咆哮、爆裂火焰等:先播放起手特效,再在指定落点播放命中特效。
json
[
{
"uid": 100020,
"name": "寒冰爆破",
"effectID": 100020,
"rsc": "magic",
"playbackMode": "point",
"playback": { "destination": "messagePoint" },
"startFrame": [
{ "begin": 3840, "frame": 10 }
],
"beatenFrame": { "begin": 3850, "frame": 20, "delay": 0.08 }
}
]| 字段 | 含义 |
|---|---|
uid | 客户端表现条目的内部身份;怪物扩展消息通过 effectID 查到条目后取得 uid,不要求与服务端另一个技能编号对应 |
name | 表现名称 |
effectID | 表现编号,与服务端 EffectId 对应;可以与 uid 不同 |
rsc | 素材资源名,如 magic、magic2 |
playbackMode | 播放方式,point 表示在指定位置播放 |
playback.destination | 播放位置,messagePoint 表示服务端消息中的坐标 |
startFrame | 起手特效数组;不需要起手特效时直接省略,不影响身体动作 |
beatenFrame | 命中或落点特效 |
begin | 素材起始索引 |
frame | 播放帧数 |
delay | 每帧间隔,单位秒;0.08 表示每帧 80 毫秒 |
各阶段可以单独填写 rsc 覆盖默认资源。示例采用原生素材布局,使用时应确认资源包含对应帧,并选择未占用的编号。合并配置时添加数组元素,不要覆盖原有技能库。
飞行特效
适用于飞符等:从施法者飞向指定落点,抵达后播放命中特效。
json
[
{
"uid": 100021,
"name": "灵符爆破",
"effectID": 100021,
"rsc": "magic",
"playbackMode": "projectile",
"playback": {
"destination": "messagePoint",
"travelTimeMs": 150
},
"startFrame": [
{ "begin": 940, "frame": 10 }
],
"flyFrame": { "begin": 1160, "frame": 3, "delay": 0.08 },
"beatenFrame": { "begin": 1360, "frame": 10, "delay": 0.08 }
}
]flyFrame:飞行过程使用的素材。travelTimeMs:从起点移动到终点的总时间,单位毫秒。这里是 150 毫秒;距离越远,视觉移动速度越快。flyFrame.delay:弹道自身的动画帧间隔,与移动时间是两回事。
destination 改为 targetSnapshot 时,使用播放开始时读取的目标位置作为终点,不持续追踪目标。messagePoint 不要求落点处存在角色。
省略 playback 时,projectile 沿用目标位置解析和默认飞行时间:找到目标时约 0.3 秒;未找到时沿朝向向前播放约 1 秒,不播放正常的目标命中特效。建议需要固定落点的技能显式填写位置和时间。
直线特效
适用于疾光电影:从施法者位置按朝向选取素材播放,不需要飞行阶段。
json
[
{
"uid": 100022,
"name": "雷光射线",
"effectID": 100022,
"rsc": "magic",
"playbackMode": "beam",
"startFrame": [
{ "begin": 940, "frame": 10 }
],
"beatenFrame": { "begin": 970, "frame": 6, "delay": 0.08 }
}
]beam 使用疾光电影式方向素材布局,不填写播放位置或飞行时间。它不会根据服务端伤害范围自动拉伸长度或宽度。
播放参数速查
| 参数 | 可选值 | 用途 |
|---|---|---|
playbackMode | point | 在指定位置播放 beatenFrame |
projectile | 播放 flyFrame,抵达后播放 beatenFrame | |
beam | 按施法者朝向播放直线特效 | |
playback.destination | messagePoint | 消息落点,适用于 point / projectile |
targetSnapshot | 目标位置快照,仅用于 projectile | |
caster | 施法者位置,仅用于 point,例如自身范围爆炸 | |
playback.travelTimeMs | 正数,毫秒 | projectile 的固定飞行耗时 |
point 省略位置时使用消息落点。新增技能建议明确填写 playbackMode;省略时沿用原生技能的旧编号判断。
起手素材若需要按方向选帧,可在 startFrame 项中填写 withDir: true 和 skip,方向步长为 frame + skip。普通 flyFrame 使用既有 dir 方向索引倍率,缺省为 2,方向步长为 10 × dir;它不是方向数量,不要与起手规则混用。
播放时间不控制服务端伤害时机,应在制作技能时对照两者的视觉节奏。剑术 hitFrame、护盾状态、火墙等地图事件继续使用各自的表现链路,不通过上述三种模式定义其持续和消失。