【游戏功能】
一、先抛一个坑
三段连斩的第一版做出来,策划看完只说了一句:"这是三个技能吧?"三刀的斩痕分别从上斜、下斜、平三个角度掠过,单看每一段都没问题,连起来却像三个互不相识的人轮流砍了一刀。多段连击的难度从来不在"打三下",在三下之间的关系——角度要有呼应,间隔要有节奏,收势要有交代。差了这口气,三段斩就是三个孤儿的拼盘。
二、机制原理:错层角度与段间节奏
三段连斩的排布要点。错层角度:三段斩痕分别取上斜、下斜、平斩三个角度,段与段之间的角度差在一百二十度上下,观感是"刀从不同方向缠着目标走"——锁定目标的三段斩打的都是头胸区域,角度差只是视觉的缠丝,判定始终在一个区域内。段间间隔:两百二十毫秒上下,快到不中断、慢到能数清,间隔做成可调参数,让策划自己找最舒服的连击呼吸。终结交代:第三段可选附带全方位冲击环,把"收势"演成一个小爆发——三段是铺垫,第三段是答案。
fx-ultslash
三、正确写法:三段错层连斩(幂尔版)
local TripleSlash = {}
local CONST = { MSG_ID = 12150, KEY = "TripleSlash", GAP = 0.22, AIM_H = 64 }
function TripleSlash.Cast(myID, targetID)
local tx = SL:GetValue("ACTOR_POSITION_X", targetID)
local angs = { -0.5, 0.5, 0 } -- 三段角度: 上斜/下斜/平
for i = 1, 3 do
SL:ScheduleOnce(function()
-- 每段: 斩痕角度错层, 命中同一头胸区域
SpawnSlashArc(tx, SL:GetValue("ACTOR_POSITION_Y", targetID) - CONST.AIM_H,
angs[i], i == 2)
SL:SendLuaNetMsg(CONST.MSG_ID, targetID, 0, 0,
SL:JsonEncode({ key = CONST.KEY, op = 2, hit = targetID, seg = i }))
if i == 3 and TripleShockEnabled() then -- 终结爆发
SpawnShockRing(tx, SL:GetValue("ACTOR_POSITION_Y", targetID))
end
end, (i - 1) * CONST.GAP * 1000)
end
end
SL:RegisterLuaNetMsg(CONST.MSG_ID, function(_, p1, p2, p3, msgData)
local d = SL:JsonDecode(msgData)
if d.key ~= CONST.KEY or d.op ~= 2 then return end
local m = FindActor(d.hit)
if m then m:RefreshHurt() end -- 每段刷新受击, 不重播全套
end)
return TripleSlash
四、四个必须钉死的细节
五、心法:连击的魂在段与段之间
三段连斩教的是"段间设计":每段独立看都平常,段与段之间的角度呼应、节奏递进、终结交代,才是连击的魂。多段技能的评审方法就是把段间空隙逐帧看一遍——空隙里全是设计,帧里只有施工。
全站技术干货持续更新:996 引擎 / Lua 实战帖,语法、参数与示例一篇讲透。进入文章地图 · 查看全部 →
【游戏功能】 一刀才二十,凭什么说它是好技能?放血的账要等五秒后才看得全:刀口一开,血自己往外淌,五口小额慢扣,总账远超那一…
【游戏功能】 从它头顶翻过去,落地的哪一秒最疼?答案是它转过身来之前的那半秒。燕返的全套设计都围着这半秒转:起跳掠过头顶、落…
【游戏功能】 移速快两成有什么用?打不到人的时候才知道。疾行术是这批技能里数值最朴素的一个——没有伤害、没有控制,就一条移速…
【游戏功能】 太极阵的骨架就这一行:在地上画一个会转的阴阳圈。但让怪物"身不由己"往阵心走的,不是这个圈的画,是圈里每帧都在…
【游戏功能】 明明开着护甲,怎么比裸奔掉血还快?有人把神圣战甲术和金刚护体混为一谈——罩是先扣罩值再掉血,甲是每一刀 打对折…
【游戏功能】 血条见底的时候,道士的刀为什么还在回血?血刀术的反直觉就在这:伤害照给、血也照回,两条账同时走——它不是"吸血…