独立游戏开发日志 ①:从信号博弈到涂色对战——一次玩法重构始

这是《信号漂流》系列开发日志的第一篇。这一篇不讲代码,讲玩法------因为这套玩法的第一版已经不存在了,它被推翻过一次。一个游戏项目里最值得记下来的,往往就是被推翻的那部分。

这个项目是什么

《信号漂流》是一个 PC 端俯视角 2D 实时 1v1 联机对战游戏,客户端 Unity,后端 Go。它是我用来展示后端能力的求职作品,所以架构设计的重心全在后端:TCP 网关 + 大厅服务 + 房间战斗服务三层解耦、全服务端权威(客户端零战斗逻辑,彻底防作弊)、战斗与数据库 IO 隔离(内存异步事件队列)、全 JSON 配置驱动。

但这些都不是今天的主角。今天的主角是:这个游戏最开始玩起来是什么样,以及它为什么变成了现在这样。

第一版:一场"信号博弈"

最初的玩法设想是:
PC 端 2D 1v1 多人联机信号博弈游戏,无实体单位、无怪物、无空中信号对冲。

关键词是无实体单位 。没有角色、没有血量、没有子弹对撞,整个对局只有一样东西:信号------玩家把能量发射出去,信号飞行、坠落、争夺地图上的节点。

灵感来自宇宙天体物理现象------黑洞扭曲光迹、光线镜面反射的画面,让我萌生以能量信号作为对抗载体的想法;再结合星际领地争夺的设定(有信号交流才能更好地管理地域),摒弃传统兵种厮杀的模式,设计出依靠发射信号抢占节点、依靠地形拉扯博弈的对战玩法,搭配能量产出与占领绑定的资源循环,形成这套信号对抗游戏。

核心循环

地图有三类节点:普通节点是经济核心,唯一可被占领、参与产出的节点;反射节点会镜面反弹信号,但每次反射扣一截飞行里程;黑洞节点用引力扭曲信号轨迹,靠近核心直接湮灭。反射和黑洞是纯中立地形,不参与占领和产出,存在的意义是改变信号飞行------把地图变成一张需要绕行、借力的棋盘。

普通节点各有一个"统一占领值",初始为 0,玩家 1 的信号命中就加、玩家 2 命中就减:大于 0 归玩家 1,小于 0 归玩家 2,等于 0 中立。一个正负数表达三方状态,这是这套模型最干净的地方。

能量经济是自洽的:占领权重 每 Tick 产出能量 → 能量投入发射信号 → 信号争夺节点 → 改变占领权重。自己占领得越多,产得越快,滚雪球;而黑洞、反射这类地形不产出------信号撞上去要么被吞、要么被弹,投入的能量直接打水漂,逼使玩家可以在"借地形打弹道"和"老实铺普通节点"之间取舍。

胜负是双判定:任一方占领占比达到 60% 立即获胜;否则打满时限对比权重,高者胜,相等平局。

它玩起来是什么感觉

操作是:点信号塔选发射源 → 拖滑块定投入能量 → 点地图定飞行方向,之后全交给服务端模拟。能量投得越多,信号飞得越远、威力越大,但随距离衰减------每发都要在射程和威力之间取舍。这个循环很自洽,作为设计稿它是完整的。

转折:为什么推翻重来

后来和朋友讨论了一下,得到的反馈很一致:这玩法有点无聊。

回头看,原因大概是这几条,它们都指向同一个结论:这个玩法 " 端不出去"

  1. 玩法单调。只能操控信号塔,力度不好控制;动力和威力分开控制又太麻烦,放在一起,占点的时候又会因为动力的关系导致威力过多或过少。

  2. 没有实体单位,观赏性差。无实体 = 屏幕上没有"谁在动",镜头里只有飞来飞去的点和数字,录屏、直播、发给别人看,都不抓人。

  3. 零美术资源约束。项目从头到尾没有美术,画面全靠几何图形 + 粒子 + 辉光。设计越抽象,越依赖美术去表达,反过来就越吃力。

于是重构方向很明确:找一个 " 规则简单、反馈直观、视觉自带冲击力" 的玩法内核,把原设计里值钱的机制继承下来,把拖后腿的部分换掉。

第二版:涂色对战

涂色是怎么想到的

第一版的"领土 = 资源"内核没问题,问题出在表达:占领是写在一个个节点上的数值,玩家和观众要盯着一堆数字才能读懂局势。那就换个思路:如果占领本身就是 " 看得见" 的东西呢?

这让我想起小时候见过的一款游戏:两个队伍互泼颜料抢地盘,颜色慢慢爬满地图......于是我想:

把"占领节点"翻译成"占领地面",把"占领值正负"翻译成"地面颜色"------那干脆也放弃"定点发射"的炮台式玩法,让玩家自己去涂。走到哪,就涂到哪,势力就到哪------局势一眼可读,胜负占比就是屏幕上颜色的比例。这一步翻译几乎把第一版的家底全部继承了下来:

  • 信号弹道、黑洞、反射这些机制几乎原样搬进新玩法,只是服务对象从"节点数值"变成了"地面颜色",还顺手补了能"越墙偷涂"的抛射弹;
  • 胜负双判定也留下了,换成了更适合涂色的形式(逐项对照见下一节);
  • 改动最大的是资源循环:节点产能被墨量槽取代,"领土 = 资源"变成了"领土 = 机动性 + 火力",领地优势滚雪球的逻辑没变。

所以第二版的思路一句话总结:**把抽象数值翻译成空间语言,把指挥体验翻译成操控体验,值钱的内核一个没丢。**这也是它叫"重构"而不是"换项目"的原因。

定稿

新玩法最终定为: " 涂色占地" 为核心的对战。1v1,双方各操控一个"信号体",WASD 移动、鼠标瞄准射击,没有血量、没有击杀、没有复活------被敌方弹命中只是减速 1.5 秒 + 脚下被泼一滩敌色。

胜负只看一件事:3 分钟结束时,谁的涂色占比高。占比达到 75% 时触发 5 秒胜利倒计时,倒计时内被压回 75% 以下可以打断------劣势方永远有翻盘窗口,不会出现"开局崩了后面全是垃圾时间"。

打起来是什么感觉

手里有两个弹种,各管一摊事:

  • 直射弹(左键):铺色、压制、连发。沿途拉一条窄墨线、终点泼一小滩,会被墙挡住、被黑洞引力拉弯、撞反射墙弹射------弹道本身就是技术;
  • 抛射弹(右键):越墙偷涂、远程开团。指哪落哪,落点一大滩圆形溅射,但飞行慢、耗墨高,落点还会亮预警圈,对方看得见------明牌博弈。

墨量槽是第二套博弈:上限 100,发射消耗,而回复速度和移动速度都看脚下格子颜色------踩自己颜色回墨 2 倍、移速 +30%,踩敌方颜色回墨只剩 0.4 倍、移速 -30%。所以劣势方缩回己方区域就能满速回墨,翻盘的火力永远在。

地图左右对称:两端是各自的主塔(出生点 + 一圈永久己方色安全区),中央是黑洞引力区,两条被墙隔开的侧翼通道通到对方腹地,侧翼拐角放着反射墙,奖励会打弹射的人。全图固定镜头、双方全程明牌------没有视野博弈,博弈全在地面和弹道里。

3 分钟打完,结算也做了演出:胜方颜色以主塔为中心涌满全屏,平局则双色对涌各占半屏;结算面板画出本局占比变化曲线(青/品红两条折线)和各项统计(涂色格数、命中、反射、湮灭),ELO 变化同步入账。

哪些是继承,哪些是改造

把两版逐项摆在一起看,会发现它不是推倒重来,而是有继承的换血

原设计 重构后 关系
节点占领值(正负号代表归属) 涂色格子矩阵(128×72,每格二值) 改造:连续数值 → 离散格子,表达更直观,服务端算起来也更简单
信号双数值模型(动力+威力) 双弹道(直射弹/抛射弹),共用"带剩余里程的弹体"框架 改造:两种弹差异全由配置开关驱动(是否碰墙/受引力/可反射)
占领权重 → 产能 → 发射 墨量槽 + 脚下颜色决定回墨/移速倍率 改造:经济内核保留(领土=资源),但把"全局数值结算"变成"空间阵地博弈"
无敌信号塔 主塔(出生点 + 永久己方色安全区) 换形态:原设计里"不可占领的塔"变成"不可被覆盖的出生点",功能等价但有了视觉锚点
黑洞节点 黑洞(引力圈 + 湮灭 + 周围禁涂) 保留
反射节点 反射墙(镜面弹射 + 扣里程) 保留
60% 即时胜利 / 时限判定 75% 倒计时 / 3 分钟时限 改造:双判定保留,但加了"可打断的倒计时",劣势方体验完全不同
三层架构、网关协议、大厅业务、断线重连、监控 全部原样保留 继承:重构只动房间内部,网关/大厅一行没改
背包道具系统 删掉 :破坏 1v1 公平性;CRUD 展示已有好友系统承担
节点产能经济 删掉 :被墨量槽机制取代

有两处我觉得特别值得记:

一是" 无敌信号塔 → 主塔" 这个换形态。原设计里信号塔是纯数值概念(固定产能 + 不可占领),新设计里它是出生点 + 回墨安全区,塔周围一圈地永久是自己的颜色。功能上一一对应,但玩家有了"家"的体感------劣势时缩回家回墨,这个空间叙事是原版没有的。

二是为什么保留黑洞和反射。它们是我觉得原版最有辨识度的机制,直接扔掉太可惜。新玩法里它们被重新定位:黑洞放地图中央做"焦点",引力圈内弹道被拉弯、贴近湮灭,逼玩家绕路;反射墙放侧翼拐角,奖励会打弹射的人。两个机制都从"核心玩法的一部分"降级成"地图元素",负担变轻了,风味留住了。

几个关键选型

  • 为什么是 2D ,不是 3D 。玩法内核(涂色占比)本身和维度无关,但重构时认真考虑过 3D------镜头运镜和画面冲击力明显更强,也更有"大作感"。最终放弃 3D,理由很具体:
    • 涂色玩法的心脏是"颜色覆盖地面"------128×72 的格子矩阵天然是 2D 数据结构,俯视角 2D 下"看着颜色蔓延"这个爽点最直接;3D 视角要处理透视和遮挡,颜色反馈反而打折;
    • 零美术资源下 3D 是灾难:没有模型、贴图、光照,场景最容易显得廉价;而 2D 用几何图形 + 粒子 + 辉光后处理就能做出风格化效果;
    • 全图固定镜头在 2D 下几乎零成本,3D 下要么缩放镜头损失信息,要么专门做一套镜头系统;
    • 一人开发,客户端每多一分工作量,就少一分打磨后端的精力------而后端才是这个项目的核心展示面。
    • 结论:3D 是给玩法加分的,但当它需要美术和镜头系统买单时,对零美术单人项目就是负资产。2D 不是妥协,是让涂色机制以最低成本发挥最大效果的维度。
  • 全图固定镜头,不做镜头跟随 。地图 1280×720 恰好铺满一屏,双方全程明牌。理由写在设计文档里:"涂色玩法的爽点在看着颜色蔓延,全图镜头把它拉满"。而且客户端省掉整块镜头工作量,观战视角 = 玩家视角,录屏零额外开发------宣传这件事是从玩法层面就开始设计的,不是做完再补的
  • 服务端权威不变。客户端只发输入指令(移动方向 + 开火标记 + 鼠标坐标),永不上报自身位置;位置、涂色、命中全部服务端积分和判定。涂色的随机溅射也是服务端掷骰子,结果经脏格子同步,全端一致。防作弊这套东西是原版的核心价值观,原样搬过来了。
  • 砍背包 。原设计里有道具系统(射程系数修正之类的),重构时直接删了。理由很实在:1v1 对战里任何不对称加成都会伤害公平性,而且 CRUD 的展示价值好友系统已经承担了。为展示而存在的系统,如果不顺带服务核心玩法,就是负资产。
  • Bot 从一开始就在设计里。服务端 Bot 走与真人完全相同的输入指令通道,没有后门;Bot vs Bot + 观战视角可以挂机产出对局画面,录屏即宣传素材。这是给"没有美术、没有队友、没人陪玩"的单人开发者留的营销通道。

现在走到哪了

设计定稿后,我把它拆成了五份可执行的实现计划:网关(纯网络层,自研二进制协议)→ 大厅(账号/匹配/好友)→ Unity 客户端 → 房间战斗(核心玩法)→ Bot 与演示包。

下一篇应该会写网关那一层:自研二进制协议怎么处理粘包分包、会话和读写协程怎么优雅退出、心跳超时和限流怎么配合------那部分是纯后端的东西,也是这个项目真正的主菜。

相关推荐
杨先生哦1 小时前
【2026热端攻防系列 11/12】前端AI风控攻防实战:验证码缺陷、人机验证绕过、智能爬虫对抗与企业智能风控加固方案
前端·人工智能·笔记·爬虫·安全
CodeSheep1 小时前
hvv员工家属爆料:老公22年入职的,普通员工,老是被误以为高薪多奖金,实际上还没配股,暂时钱没存多少,我倒是很心疼他工作辛苦。
前端·后端·程序员
IT_陈寒1 小时前
Redis这个内存杀手坑惨了我,排查三小时发现是过期策略搞的鬼
前端·人工智能·后端
for_ever_love__1 小时前
iOS: 网络请求第三方库的使用: AFNetworking
网络·学习·ios·objective-c·cocoa·xcode
摇滚侠1 小时前
《SpringBoot 3:入门与应用实战》第 15 章 生产级特性 使用监控体系 阅读笔记
spring boot·笔记·后端
倔强的石头1061 小时前
Spring Boot 接入金仓数据库:配置分层、启动自检与常见错误
数据库·spring boot·后端
五仁烧饼1 小时前
Unity Addressables 资源依赖治理:规则约束、自动修复与全链路防护
java·unity·游戏引擎
人间凡尔赛2 小时前
2026 云原生后端架构演进:事件驱动、虚拟线程与 AI Agent 内嵌,三驾马车如何重塑技术栈
后端·云原生·架构
我叫唧唧波2 小时前
【Java】Java 基础系统学习笔记
java·笔记·学习