【游戏功能】
一、一次团灭全场的连锁
尸爆机制第一次上内测,一只精英怪死在怪堆正中间,两秒后连环五爆,全场清空——本该是精彩的时刻,测试的反馈是"这什么玩意儿把我秒了"。问题不在伤害数值,在表现铺垫:尸体爆炸前的充能阶段没有任何视觉提示,玩家不知道脚边的尸体是颗定时炸弹。加上充能表现之后同一套数值再测:尸体泛红光、抖动越来越凶、两秒后炸开,玩家开始有意识地拉开距离,击杀选址变成了新策略——机制没动一分,体验天壤之别。
二、机制原理:充能、爆炸、连锁
尸爆是个三段闭环。充能段:怪物死亡动作播完、尸体停留的同时 fuse 计时器开始倒数,视觉是红光从无到有渐盛、抖动幅度随剩余时间增大——这两条曲线是玩家的逃生倒计时,读得懂光就读得懂死。爆炸段:倒计时归零,扩散光环加迸射火星,椭圆范围内活体掉血、飘字、受击。连锁段:被爆炸波及致死的怪,尸体同样进入充能——只是引信更短,一串尸体像多米诺。连锁的深度就是玩家走位的博弈空间:往怪堆里打是高收益高风险,往外围拆解是稳但慢。
fx-corpsebomb
三、正确写法:尸爆闭环(引擎侧)
function gameActorMonster:EnterDeadState()
self._keepLastFrame = true
self:PlayAction(global.MMO.ANIM_DIE)
if self._explodeOnDead then
self._fuse = 2.0 -- 充能 2 秒
SpawnChargeGlow(self, 2.0) -- 红光渐盛+抖动加剧
end
end
function gameActorMonster:UpdateDead(dt)
if not self._fuse then return end
self._fuse = self._fuse - dt
self._root:setPositionX(self._ox + (math.random() - 0.5) * (2 - self._fuse) * 3)
if self._fuse <= 0 then self:CorpseExplode() end
end
function gameActorMonster:CorpseExplode()
SpawnExplode(self._x, self._y)
local R = global.QuakeConfig.CorpseBombRadius
for _, m in ipairs(GetMonstersAround(self, R)) do
if m ~= self and m:Alive() then
m:OnHit(30)
if not m:Alive() then
m._explodeOnDead = true
m._fuseLen = 1.6 -- 连锁引信更短
end
end
end
self:RealRemove()
end
四、四个必须钉死的细节
五、心法:危险必须可读
尸爆的翻车与修复说明一条铁律:任何新增的危险源,必须配套等量的可读性。充能红光是危险的说明书,抖动加剧是倒计时的指针,玩家读得懂才有"下次我知道怎么办"。反过来,隐藏的危险不是难度是欺骗——欺骗一次,玩家对整个战场信息的信任崩塌,之后所有机制的演出他们都不再相信。危险明码标价,博弈才有意义。
全站技术干货持续更新:996 引擎 / Lua 实战帖,语法、参数与示例一篇讲透。进入文章地图 · 查看全部 →
【游戏功能】 一、先抛一个坑 同样是"放一片技能特效",为什么有的游戏炸二十个火球丝般顺滑,有的游戏炸五个就掉帧?直觉答案"…
【游戏功能】 一、一个职业选手的操作拆解 看高手第一视角录像,最费解的操作是:他打一下、退两步、再打一下,全程像在跳一支排练…
【游戏功能】 一、一个被浪费的冰冻 组里新人做了个冰法连招:冰冻命中后立刻接大火球,理论伤害翻倍。试玩却怪怪的——冰冻刚套上…
【游戏功能】 一、一次吓到自己的召唤 召唤兽系统的内测录像里有个名场面:道士按下召唤,屏幕上"啪"地多出一只金毛巨狼,没有地…
【游戏功能】 一、先抛一个坑 领域类技能最怕做成"一次性特效放完拉倒":冰环扩一圈、冻一下、结束——站在领域里的怪第二秒解冻…
【游戏功能】 一、一次只有挨打没有还手的守势 守势类技能首版的哀嚎最一致:"金环弹开了围攻,然后呢?"——然后没有然后。格挡…