【游戏功能】
一、一把看不见的大剑
开天斩的初版在帮会战首秀翻车:满屏技能光效里,从天而降的巨剑没有任何预警,砸完才看见地上插着一把剑。被劈中的玩家怒斥"阴招",劈中人的玩家也没爽到——他根本不知道自己劈中了谁。天降系技能的共生命题就在这:一切从画面外飞进来的东西,玩家视网膜上是防不住的,必须给它一个"落在地上的预告"。开天斩的答案是一枚渐渐扩大的影子:剑还挂在天上,影子已经先到了。
二、机制原理:影子、坠落、插地
开天斩的完整时间线四拍。预警拍零点九秒:落点出现暗色椭圆影子,随时间扩大并加速明灭——影子的最终尺寸就是剑的横截面,玩家看着影子长大就能估算剑有多大、圈有多广。坠落拍零点二四秒:巨剑带着竖直拖尾从画面顶端砸落,速度感由拖尾长度背书。插地拍:剑尖入地的瞬间,冲击波椭圆扩散、震屏一次、范围内目标受击——剑插进地里,露出上半截。驻留拍两秒多:插在地上的剑原地渐隐"拔走",它是这场技能的纪念碑,也把落点信息多留了两秒给战场阅读。
fx-giantsword
三、正确写法:影子先行的天降物(引擎侧)
function skySword:Cast(x, y)
self._x, self._y = x, y
self._phase, self._t = 'warn', 0
self._shadow = CreateShadowWarning(x, y, 0.9) -- 影子预警 0.9s
self._shadow:GrowTo(SWORD_W * 3) -- 长到剑的横截面
end
function skySword:Update(dt)
self._t = self._t + dt
if self._phase == 'warn' and self._t >= 0.9 then
self._phase, self._t = 'fall', 0
elseif self._phase == 'fall' then
local p = math.min(1, self._t / 0.24)
self._swordY = -320 + p * (320 - SWORD_LEN * 0.5)
if p >= 1 then
self._phase, self._t = 'stuck', 0
SpawnShockwave(self._x, self._y) -- 扩散冲击波
ScreenShake(0.5)
for _, m in ipairs(GetMonstersNearX(self._x, 90)) do
m:OnHit(self._dmg)
end
end
elseif self._phase == 'stuck' and self._t >= 2.2 then
self:Remove() -- 渐隐拔走
end
end
四、四个必须钉死的细节
五、心法:天上掉的都要有影子
开天斩的影子律适用于一切天降物:陨石、箭雨、暴雨梨花针,落地之前先把影子铺在地上。影子是天与地之间唯一的预告协议——它不挡视线、不占层级、形状即范围,是成本一像素信息量最大的一种特效。下次策划提"从天上掉个东西下来",第一句反问永远是:它的影子长什么样?
全站技术干货持续更新:996 引擎 / Lua 实战帖,语法、参数与示例一篇讲透。进入文章地图 · 查看全部 →
【游戏功能】 无极真气的全部开关就这一行:给角色挂一层六秒的金气光环。但光环底下压着三条规矩——窗口期、三刀递增、过期作废。…
【游戏功能】 气功波为什么不掉血?战士一掌把狼怪推出去三步开外,狼怪头顶连个伤害数字都没有——新手第一反应是"技能没生效",…
【游戏功能】 法术共振报错刷了半屏: bolt target moved: anchor stale ——第一道雷落下到第二…
【游戏功能】 上周团里法师连放七个玄冰刺,怪的血没掉多少,指挥却在喊"完美控场"——直到有人回放录像才发现,狼怪绕着冰圈外圈…
【游戏功能】 彻地钉整套表现的钥匙就这一行:钉子不是打在狼怪身上,是从 地里的固定点 窜出来。今天顺着这行拆彻地钉——为什么…
【游戏功能】 道士的符为什么追着人咬?你明明看着它出手时冲左,狼怪往右一挪,符在半空拐了个弯还是贴上它的胸口——这不是弹道,…