下载 App

《骰子大冒险》开发日志 · 05

修改于10/207 浏览综合
战斗动画:从"两个立绘互怼"到"侧身出手"
一、第一版战斗,是两个立绘在互相点头
最早版本的战斗,简单到有点好笑。
左边一个英雄立绘,右边一个敌人立绘。玩家点了"确认出战",两边的图轮流抖动一下——抖一下代表攻击,抖完了对面头顶飘个伤害数字。
第一次给朋友看,他的评价是:
"它们是在打架,还是在互相鞠躬?"
这话说得对。战斗是游戏的核心场景,但它当时看起来像"两个贴纸在动"。
从那天起,我们开始了一段长达一个多月的战斗动画改造——中间推翻过三次,有一次差点把整个方向做废。
二、第一次尝试:把骰子做成 3D
转折点出现在"骰子"上。
我们的战斗核心是掷骰子,玩家对骰子的关注度远高于角色立绘。所以我们想:与其做角色动画,不如先把骰子做酷。
当时的想法是:用代码画一个 3D 骰子。数学算好,一个立方体 8 个顶点,程序化旋转,实时渲染。听起来很酷,实现出来也确实能转。
但问题很快就来了:
透视畸变。3D 立方体转到某个角度会变成梯形,因为相机太近。
正面看不到点数。骰子转起来的时候,玩家根本看不清掷出了什么。
颜色太暗。程序化渲染没有材质感,看起来像一块砖。
我们改了十几次参数,从一个"能转的方块"改到一个"看起来像骰子的方块"。最后拍板的时候,主策说了一句话:
"它转得很努力,但它不像一颗骰子。"
三、第二次尝试:让 AI 画 12 帧翻滚
3D 方案失败后,我们想到了另一个方向——序列帧。
思路很简单:让 AI 生成一段骰子翻滚的动画,12 帧,循环播放。这样"真实感"和"美术风格"一次解决。
生成出来,乍一看挺像。但摆到一起播放,立刻暴露了:
帧与帧之间不连贯。同一颗骰子,第 3 帧还是 6 点朝上,第 4 帧变成了 2 点,第 5 帧又转回来了。
尺寸不一致。有的帧骰子占满画布,有的帧只有一半大。
光照方向乱。有的帧左上高光,有的帧右上高光。
我们量化了一下"相邻帧的相似度",结果是 0.575——满值 1.0,低于 0.9 就没法当动画播。
那 12 张图,最后全部删掉了。
那次失败给了我一个很重要的教训:
AI 不理解"逐帧递进"。
你让它画 12 张"骰子在翻滚",它会画 12 张"看起来像骰子的图",而不是"一个骰子滚了 3 圈"。
四、转折:从"翻滚"到"侧身"
骰子的方向换了。我们放弃了"骰子翻滚",改成快速切图 + 弹跳——每 0.05 秒换一张点数图,视觉上就是"点数在跳"。
而真正的突破,发生在角色上。
有一次,我随手把英雄立绘"旋转 90 度"做成侧身,看看效果。结果发现:
侧身的英雄 + 侧身的敌人,不需要真的打起来,只要"互相靠近"就很有战斗感。
我们立刻改了方向:所有角色,都要做一套"侧身序列帧"。
站立(idle)
蓄力(atk_1)
出击(atk_2)
命中(atk_3)
余势(atk_4)
收招(atk_5)
加上受击 2 帧,一个角色 8 帧。28 个英雄 + 19 个敌人 = 47 个角色 × 8 帧 = 376 张图。
我们做了整整两周。
五、一个系统性的 bug:所有 BOSS 的"收招"都在转正面
序列帧做完之后,我们自认为过关了。直到有玩家截图反馈——
"BOSS 打完一下会突然转过来看我。"
我以为是偶发问题,结果一帧一帧检查,发现:
15 个 BOSS 的 atk_5(收招帧),全部都是正面朝观众。
根因很傻——我写 prompt 的时候,每一帧都写了"收招姿态回到站立"。
而 AI 理解"站立"的方式,是参考图里的站立——也就是那张正面立绘。
所以它画的不是"侧身站姿",是"正面站立"。
这是我在这个项目里,犯的最大的一个系统性错误。 15 个 BOSS、15 帧、全部重做。
教训是:
给 AI 写 prompt,不要写"回到 X"。
要写"保持 Y,绝对不要变成 X"。
六、最后一段:让 BOSS 也"像敌人"
做完侧身帧之后,战斗终于"能看"了。但还有一个新问题——
BOSS 长得太像英雄了。
我们的英雄设定是"骰盅拟人化"——一个圆柱形的骰盅,长出手脚,戴上头盔。结果 BOSS 也做成骰盅之后,玩家分不清"哪个是我,哪个是敌人"。
最后的解决方案,是把所有 BOSS 都改成"物品拟人化":
西部酒馆的 BOSS,是扑克牌、左轮手枪、威士忌瓶
中世纪酒馆的 BOSS,是盾牌、长剑、战锤、金杯、王冠
魔法酒馆的 BOSS,是魔法书、水晶球、烧瓶、星盘、法杖
英雄是"骰盅",敌人是"东西"——一眼就能分清。
七、写在最后
战斗动画这段路,我们走了快两个月。中间推翻过:
3D 骰子 → 序列帧骰子 → 切图骰子
正面立绘 → 侧身序列帧
骰盅 BOSS → 物品拟人 BOSS
回头看,最有价值的经验其实是第三条:
不要让 AI 画"一个在动的东西"。
让 AI 画"这个动作有哪几个瞬间",然后你把它们接起来。
我们最后给 AI 的每一个 prompt 都是这样的:
"第 3 帧:权杖砸下,杖尖朝左下方,身体前倾 30 度,保持侧身,不要转正面。"
不是"让他挥杖"。是"他在挥杖的哪一个瞬间"。
这也是做战斗动画最难的部分——不是画出动作,是把动作拆成瞬间。
游戏名:《骰子大冒险》
开发工具:TapTap 制造
当前进度:20 关全部完成,4 个主题(经典酒馆 / 西部酒馆 / 中世纪酒馆 / 魔法酒馆),56 个英雄与敌人立绘全部就位,战斗动画 / 音效 / 宣传视频已完成,准备提交审核
《骰子大冒险》开发日志 · 02截图
《骰子大冒险》开发日志 · 02
我们删掉了暴击:一次数值系统的大手术 一、一个被"豹子6"毁掉的游戏 项目早期,我们的伤害公式很标准,标准到有点无聊: 伤害 = 攻击力 × 组合倍率 × 减伤 掷骰识别出组合 → 查表拿倍率 → 乘攻击力。豹子6 是 ×60,四带一 ×8,一对 ×1.5。 第一次内部测试,问题立刻暴露了。 测试同学掷出豹子6,屏幕上蹦出一个六位数的伤害数字,敌人直接消失。下一场掷出散牌,伤害只有两位数,被小怪按
4 赞
《骰子大冒险》开发日志 · 04截图
《骰子大冒险》开发日志 · 04
抽卡界面是怎么从"功能列表"变成"卡池"的 一、第一版:一个按钮,一张列表 抽卡系统的第一版,我们做得很快。 一个"抽 10 次"的按钮,点一下,屏幕中央弹出一张白色的半透明列表,从上到下写着: text 幸运骰徒 命运编织者 ×20 护面卫兵 ×5 骰神 时光骰师 ... 每行文字用颜色区分稀有度:灰色、蓝色、金色、红色。 功能完整,逻辑正确,测试通过。 然后我们找了几个没参与开发的朋友来试玩,
4 赞
《骰子大冒险》开发日志 · 03截图
《骰子大冒险》开发日志 · 03
骰盅是怎么变成英雄的 一、第一版:一个拿着骰盅的吉祥物 立项初期,我们对"骰盅拟人化"的理解是——一个可爱的角色,手里拿着一个骰盅。 于是我们让 AI 生成了第一版立绘:一只圆脸的白色小动物,戴着一顶骰子主题的帽子,怀里抱着一个骰盅,眼睛闪闪发光。 看起来很可爱。发到群里,得到的第一个反馈是: "这是骰盅英雄?还是一个在赌场打工的吉祥物?" 那时候我们才意识到:"拿着骰盅"和"骰盅本身就是角色"是
3 赞
《骰子大冒险》开发日志 · 01截图
《骰子大冒险》开发日志 · 01
从一颗骰子到无限可能:当"涌现"成为核心设计 一、什么是"涌现"? 在游戏设计里,"涌现"(Emergence)指的不是画面特效,而是一种设计哲学: 用尽可能简单的底层规则,让玩家自己组合出我们都没预料到的玩法。 经典例子是《塞尔达:旷野之息》的化学引擎、《Minecraft》的红石、《以撒的结合》的道具协同。它们共同的特点都是——开发者搭好规则骨架,玩家负责长出血肉。 《骰子大冒险》从立项第一天
3 赞