【游戏功能】
一、一把看不见的大剑
开天斩的初版在帮会战首秀翻车:满屏技能光效里,从天而降的巨剑没有任何预警,砸完才看见地上插着一把剑。被劈中的玩家怒斥"阴招",劈中人的玩家也没爽到——他根本不知道自己劈中了谁。天降系技能的共生命题就在这:一切从画面外飞进来的东西,玩家视网膜上是防不住的,必须给它一个"落在地上的预告"。开天斩的答案是一枚渐渐扩大的影子:剑还挂在天上,影子已经先到了。
二、机制原理:影子、坠落、插地
开天斩的完整时间线四拍。预警拍零点九秒:落点出现暗色椭圆影子,随时间扩大并加速明灭——影子的最终尺寸就是剑的横截面,玩家看着影子长大就能估算剑有多大、圈有多广。坠落拍零点二四秒:巨剑带着竖直拖尾从画面顶端砸落,速度感由拖尾长度背书。插地拍:剑尖入地的瞬间,冲击波椭圆扩散、震屏一次、范围内目标受击——剑插进地里,露出上半截。驻留拍两秒多:插在地上的剑原地渐隐"拔走",它是这场技能的纪念碑,也把落点信息多留了两秒给战场阅读。
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 实战帖,语法、参数与示例一篇讲透。进入文章地图 · 查看全部 →
【游戏功能】 一、先抛一个坑 同样是"放一片技能特效",为什么有的游戏炸二十个火球丝般顺滑,有的游戏炸五个就掉帧?直觉答案"…
【游戏功能】 一、一个职业选手的操作拆解 看高手第一视角录像,最费解的操作是:他打一下、退两步、再打一下,全程像在跳一支排练…
【游戏功能】 一、一个被浪费的冰冻 组里新人做了个冰法连招:冰冻命中后立刻接大火球,理论伤害翻倍。试玩却怪怪的——冰冻刚套上…
【游戏功能】 一、一次吓到自己的召唤 召唤兽系统的内测录像里有个名场面:道士按下召唤,屏幕上"啪"地多出一只金毛巨狼,没有地…
【游戏功能】 一、先抛一个坑 领域类技能最怕做成"一次性特效放完拉倒":冰环扩一圈、冻一下、结束——站在领域里的怪第二秒解冻…
【游戏功能】 一、一次只有挨打没有还手的守势 守势类技能首版的哀嚎最一致:"金环弹开了围攻,然后呢?"——然后没有然后。格挡…