数据基准 游戏v1.51 · 文档v1.6
公式速查
核心玩法 · 秒级微循环

01 · 核心玩法循环

放置游戏"即时正反馈"的根。本篇拆解 Eatventure 最底层的秒级微循环—— 工位出餐 → 工人送餐 → 顾客买单卖钱 → 玩家点击升级 → 出餐更快更值钱。 上层全部进度/经济/养成都挂在这台引擎之上。每个子系统按 设计目标 → 机制 → 数据表 → 公式/伪代码 → 设计意图 拆开。

一张图看懂这层在解什么问题

放置经营游戏的核心矛盾:离开时要有产出(挂机),在线时要有掌控感(点击)。 Eatventure 的答案是把两个时钟叠在一起——自动微循环离线也跑,点击升级随时介入立刻见效。

工位出餐秒级自动
工人送餐任务调度
柜台/顾客买单无耐心
金币指数增长
玩家点击升级
雇工/提速/加桌/利润立刻见效

自动微循环

出餐-送餐-卖钱每 tick 都在跑,离线也按 10% 折算,保证挂机有进展。收入 = base × 工位里程碑倍率 × 养成乘区。

点击升级

玩家唯一的主动操作。单步成本低、回本快,下一 tick 立即生效,制造"再点一下就更强"的密集正反馈。

工位出餐(Station / Order)—— 微循环的发动机

① 设计目标

工位是"产能的物理单位"。让玩家能并行铺开多条产线(铺得越多产能越高),同时给每条产线一个可无限升级的成长维度,把"产能"做成永远填不满的坑。

② 机制

  • 每餐厅 1~12 个工位(restaurant_layout.csv,avg 5.1),每工位绑定一道菜,按自己的周期自动出餐。
  • 出一份菜放柜台 → 工人取走送餐 → 顾客买单。工位只负责"按周期产出一份"。
  • 工位可升 5 星,升星推进餐厅完成度。
  • "赚钱能力"不在工位身上,而在利润里程碑:攒够大钱解锁,整条产线收入跳档。

③ 数据与公式

工位配置中,升星上限为 5 星。 工位里程碑配在 station_profit_milestones.csv,核心是一个极省常量的几何矩阵:

工位里程碑倍率序列:主线城 6 档 ×3 / 5 / 10 / 20 / 50 / 100
                主题/活动城 4 档 ×10 / 20 / 50 / 100
相邻工位价格公比:主线城 ×50 / 主题城 ×800
单级升级公比:B = 1.26(第0餐厅) / 1.20(其余)

station_profit_milestones.csv 真实样本(主题城 ×800 系):

工位序号里程碑档倍率解锁价
00 / 1 / 2 / 310 / 20 / 50 / 1002e14 / 3e25 / 5e32 / 1.5e43
10101.6e17  (≈ 工位0 × 800)
20101.28e20  (≈ 工位1 × 800)
几何矩阵相邻工位价格 ×800、同工位里程碑跨档暴涨——用 6 个常量生成跨数十个数量级的完整价格矩阵(详见 03 经济与数值)。

④ 平衡与节奏

工位的两条成长轴形成节奏对比:

成长轴单步成本节奏作用
密集小升级(提速 / 加利润)填满分钟级的点击反馈
稀疏大里程碑(×10 → ×100)暴涨(高几个数量级)"攒钱-跳档"的阶段性高潮,单调爬坡里的节奏锚点

⑤ 设计意图 / 可复用结论

解耦把"赚钱倍率"从工位剥离到里程碑,是这套经济最关键的解耦。 工位负责"产出频率",里程碑负责"每单价值",两者独立调参;用几何公比 + 少量里程碑常量,配置成本极低却能撑起整条指数跑道。 可复用:成长系统的"频率维度"和"价值维度"分开配,能极大降低数值调参复杂度。

菜品(Item)—— 换皮的产出物,数值不在它身上

① 设计目标

解决"内容广度":60 城 × 多餐厅需要海量视觉差异,但又不能让每道菜都成为独立的数值黑洞。

② 机制

菜品 = 工位产出物 + 视觉资产(Mesh / Icon / 机器 Prefab)。每道菜挂利润升级链速度升级链,但链上只是"升级项的名字/数量",真实利润倍率落在工位里程碑(按城/主题,不按菜)。

③ 数据与公式

菜品配置共 163 道菜。 逐字段看——没有任何利润/速度的数值字段,全是名字与资产引用:

菜品配置字段类型含义
菜名 / 图标 / 网格 / 机器 Prefab资产引用菜名 + 视觉(图标 / 网格 / 机器 Prefab)
利润升级文案 / 提速升级文案本地化字符串升级项的显示文案(非数值)
利润升级链 / 速度升级链本地化字符串数组升级链的名字数组(非数值)
可收获标记bool22 道为 true → 农场/采集类,工人去"收获"而非"取餐"

菜品↔餐厅映射见菜品-餐厅映射表;80/163 跨餐厅复用。

④ 平衡与节奏

菜品复用 + 工位里程碑驱动数值,意味着同一道 "Salad" 在第 1 城和第 40 城是完全不同的收入量级——差异全靠 cityMult + 工位公比拉开,菜品本身零改动

⑤ 设计意图 / 可复用结论

数值寄生菜品是纯"内容皮",数值寄生在工位上。 美术团队可以无限加菜(加资产即可)而不触碰数值表。 可复用:当你需要海量"内容变体"时,把变体做成纯资产引用、数值统一外置,内容产能和数值平衡就彻底解耦。

顾客(Customer / CustomerSlot)—— 没有耐心的"收银终端"

① 设计目标

经营游戏经典做法是给顾客"耐心条",逼玩家手忙脚乱。但放置游戏要的是挂机也不亏——Eatventure 刻意砍掉耐心/愤怒离场,让顾客退化成纯粹的"收银触发器"。

② 机制

  • 顾客在 CustomerSlot(柜台前)排队,工人送菜到柜台,顾客付钱离店,新顾客补位。
  • 行人是街上路过的(氛围 + 入店来源),沿行人路径行走。
  • 承载量 = customer_count 升级(+1~4) + table_count 加桌(+1~12,见 §五)。

③ 数据与公式

顾客配置共 12 套外观。 其字段全是外观(头/帽/发/身体 ID + 肤色/衣服颜色)+ 金色材质 + Customer Multipliers 下仅两个共享乘子——全表无耐心字段:

字段取值说明
金色乘子全 12 套 = 16.0金色顾客付 ×16
订单量乘子11 套 = 1.0,仅希腊隐形顾客 = 3.0单笔订单量倍率
(无耐心 / 愤怒字段)顾客不会愤怒离场,离线不流失

顾客类型纯外观换皮(Royal / Knight / Pirate / Greek / Hades… 12 套适配各主题城),数值完全共享。

金色 ×16 怎么触发?不是某种顾客"刷出来",而是药水几率触发(GoldenGulp / GreedyGulp,见 04 养成)。 任何顾客被药水点中就套上金色材质、付 ×16。这是"无耐心系统"的必然结果——既然顾客没有类型差异,"暴利顾客"就只能靠外部乘区随机注入。 (触发源为药水主动技;×16 倍率即金色乘子)

④ 平衡与节奏

没有耐心条 → 玩家离线时顾客不会流失 → 离线产能可被稳定折算(10% / 3h,见 03)。 在线时,顾客承载量(slot 数 + 桌数)是产能的"下游瓶颈":出餐再快,柜台前没顾客也卖不掉,所以 customer_count / table_count 和出餐提速形成供需两端的配平升级

⑤ 设计意图 / 可复用结论

放置化改造砍掉耐心系统,是"放置"对"经营"的根本改造。 经营游戏的紧张感来自时间压力,但放置游戏要的是"离开无惩罚"。Eatventure 把顾客从"会生气的人"降级成"会付钱的终端",把所有随机性/暴利体验外移到药水乘区。 可复用:放置化一个经营玩法时,第一个要删的就是惩罚性时间压力;把"爽点"(暴利)做成可主动触发的乘区,而非被动错过的惩罚。

工人 / 角色(Worker / Character)—— 纯外观 + per-restaurant 数值

① 设计目标

工人是"产能的执行者"(送餐/收获)。设计上要回答:工人的数量和速度该挂在哪里?答案出人意料地干净——工人本体零数值,全部数值配在餐厅升级线里

② 机制

  • 工人在工位和柜台之间往返:取餐 → 走到柜台 → 交付。空闲工人被任务调度系统派活(见 §七)。
  • 雇更多工人(worker_count,+1~5)→ 并发送餐能力↑;移动提速 → 单趟更快。
  • Character 是工人/顾客共用的角色实体(装扮挂这里);ChefFund 主厨基金归 06

③ 数据与公式

工人配置共 20 套外观,为纯视觉配置——关键是那两个"升级"字段其实是显示名,不是数值:

// 工人配置全部字段
名字          Name
图标          Icon
工人数量升级   NumberOfWorkersUpgrade   // ← 升级线"显示名",非数值!
移速升级       WalkSpeedUpgrade         // ← 同上
装备设置       EquipmentSettings        // 身体/头/帽/发 资产ID+颜色
肤色          SkinColor

真实的工人数量/速度数值,全部配在餐厅升级配置(每家餐厅独立),按工位子区细分:

数值来源每档增量价格
工人移动速度餐厅升级·工人提速恒定 +0.25(164 项全 = 0.25)指数增长(Kiosk BetterShoes 起步 8000)
工人烹饪/收获速度工人烹饪提速+1.0 / +2.0(仅 Mine 矿镐等收获工位)离散
工人数量工人数量升级+1~5指数离散

移速公式:

worker_move_speed = base_MovementSpeed × (1 + n × 0.25)
   n = 该餐厅已购工人提速升级数(平均约 3 档/餐厅,164/52)

工人名字库:34 套国家名库(Spain / Mexico / Luxembourg…)——按城市国籍给工人随机起名,纯本地化氛围,无数值。

④ 平衡与节奏

移速升级是这套数值最优雅的一笔:效果线性恒定(+0.25/级)+ 成本指数上涨

工人移速:线性效果 vs 指数成本
速度倍率随升级数线性、可预测地爬升(不会失控),而解锁价指数压制。前几档极其划算,后期每 +0.25 都要掏指数级的钱,玩家自然在"提速"和"雇人/加利润"之间做取舍。

⑤ 设计意图 / 可复用结论

教科书级平衡工人 = 纯外观皮,数值全 per-restaurant,是 §二菜品同款思路的复用。 20 套外观跨 60 城自由复用,每家餐厅的"雇几个/多快"独立可调。 移速"效果线性 + 成本指数"是教科书级手法:线性效果保证可预测(不失控),指数成本保证边际递减(不无脑堆),两条曲线一夹,自然逼出玩家的资源分配决策。 可复用:任何"可无限升级的属性",让效果走线性/恒定、成本走指数,就能既爽又不崩。

堂食容量(Tables / CustomerSlot)—— 产能的下游闸门

① 设计目标

出餐再快,也得有"地方接客"。堂食容量是产能链的下游瓶颈,故意做成一条独立升级线,让玩家在"上游提速"和"下游扩容"之间持续配平。

② 机制

CustomerSlot = 柜台前即时排队位(外带);Tables = 堂食桌位(坐下来吃,容量更大但占空间)。加桌(table_count,+1~12)= 同时能服务的顾客数↑ = 单位时间能卖掉的菜↑。

③ 数据与公式

restaurant_layout.csv 给出每家餐厅的物理容量(72 餐厅统计);运行时区域数据对应布局,含顾客位 / 柜台 / 小费位 / 工位:

容量维度min / max / avg覆盖
顾客位 num_customer_slots0 / 40 / 14.5全部
桌位 num_tables0 / 12 / 1.935/72 有桌(其余纯外带摊)
工位 num_stations1 / 12 / 5.1全部
区域 num_areas1 / 3 / 1.8全部

早期是"0 桌纯外带小摊"(LemonadeStand 类),后期才解锁堂食扩容,容量随关卡递进。

④ 平衡与节奏

容量是"看不见的天花板":玩家把出餐提速拉满后会发现收入卡住——因为顾客位/桌位不够,菜卖不出去。这迫使玩家回头点加桌/拉客,形成节奏:

提速拉满
撞容量墙收入卡住
加桌/拉客扩容
再提速

⑤ 设计意图 / 可复用结论

下游瓶颈堂食容量是刻意设计的"下游瓶颈"。它和上游提速构成一对供需配平,让玩家不能只点一条线。 可复用:在产能链上故意埋一个独立的下游闸门,能把"单调刷一条线"变成"多线配平",显著拉长升级决策的深度。

外卖运输(Transports / FoodDelivery)—— 主题城的批量物流

① 设计目标

有些主题城/分区,柜台离顾客很远(矿洞井下、太空站、海港)。运输系统解决"跨区/跨距批量送客送餐",同时成为主题城的差异化机制载体(矿镐升降梯和海盗船给完全不同的节奏感)。

② 机制

运输载具(升降梯/船/飞船/马车)在停靠点间往返,批量搭载顾客/运送货物。一个周期 = 到达(到达耗时)→ 装满(最大载客量)→ 发车(满后发车耗时)。运输槽仅 7/65 餐厅有(主题专属)。

③ 数据与公式

运输配置关键字段为最大载客量 / 基础速度 / 到达耗时 / 满后发车耗时 / 是否走行人路径。 共 15 种载具:

载具载客量基速到达满后发车走路径
SpaceShipBig103.08s10s
MineLiftHuge83.06s6s
MineLiftBig / SpaceShipMedium63.06s6 / 8s
MediumBoat / MineLiftMedium43.010 / 6s10 / 6s
Kraken / Zeus / Royal / Horse / SmallBoat1~23.0(Horse 走 path)0~15s0~30s部分
SmallBoat Pirate15.0(唯一例外)5s5s

基础速度几乎全部统一 = 3.0(唯一例外 SmallBoat Pirate = 5.0)——载具差异不在速度,而在"载客量 × 周期":

运输:容量 vs 周期
载具沿"容量-周期"二维铺开:大飞船高容量长周期(一次走 10 人)、小船低容量短周期(5s 一趟送 1 人)。吞吐量(pax/s)相近——设计者用"容量 vs 周期"这一对参数,给不同主题城调出不同的物流节奏感,而不动基速。

④ 平衡与节奏

设计点机制效果
零容量门控满后才发车(满后发车耗时)客流不足时载具空等,把"凑满一车"做成轻度策略(要不要升级拉客凑客流)
主题差异化Mine / Space / Seaport / Pirates 各有专属载具换城时物流手感明显不同,强化"换皮新鲜感"

⑤ 设计意图 / 可复用结论

固定手感锚点运输用"容量 vs 周期"而非"速度"做差异化。统一基速(3.0)保证手感一致,靠两个独立参数(载客量、周期)调出主题节奏。 可复用:当一类机制要在多个场景复用又需差异化时,固定一个"手感锚点"参数(如速度),只调正交的两三个参数,能在统一手感下做出丰富变体。

工人任务调度(Task 体系)—— 微循环的状态机

① 设计目标

工人怎么知道"现在该去取哪份餐、送到哪、走哪条路"?需要一套任务调度状态机,把"出餐-送餐-收银"拆成可被空闲工人抢占执行的原子任务。

② 机制

一条任务流水线把订单拆成原子任务,分发给空闲工人:雇的工人越多(worker_count),并发执行的任务越多。寻路走 WalkableTiles(行走网格)+ Path(运行时数据,不在配置表)。

典型工人生命周期(状态机)

任务体系把工人行为拆成一组成对出现的原子任务(取餐 / 交付 / 移交 / 收获 / 沿路径移动 / 烹饪 / 收小费), 每类任务都有对应的启动系统驱动。派活逻辑核心是"找最近空闲工人":系统在所有空闲工人中挑距离最近者承接当前任务。

空闲
PickupTask取餐
MoveOnPathTask沿 Path 走柜台
HandoverTask交付
CollectTipTask收小费
WaitTask / RestingTask待命

收获类工位:HarvestingTask(收获)替代 PickupTask

③ 数据与公式(运行时)

任务调度是运行时逻辑(无独立配置数值),其输入参数来自前面各表:

输入参数来源
工人数(并发数)§四 工人数量
移速§四 +0.25/级
出餐周期§一/§二 工位周期
行走网格restaurant_layout.csv bounds_w/h(样本 157 网格点)、区域可行走网格

运行时有一个遍历刷新工人移动速度的系统,在升级后批量更新所有工人的移速。

④ 核心 tick 伪代码

把 §一~§七 整条链合成一个 tick 循环(核心微循环,综合各表的设计还原):

# ========== 核心微循环:每帧 tick ==========
def tick(dt):
    # 1) 工位出餐
    for st in unlocked_stations:
        st.timer -= dt
        if st.timer <= 0:
            st.tray.append(produce(st.item))                 # 产出一份菜放托盘
            st.timer = st.base_time / cooking_speed(st)       # 重置周期(烹饪提速 +1/+2)

    # 2) 任务调度:把空闲工人派去送餐/收获
    for w in idle_workers():                                  # worker_count 决定并发数
        st = nearest_station_with_food()
        if st:
            task = HarvestingTask(st) if st.item.is_harvestable else PickupTask(st)
            w.assign([task,
                      MoveOnPathTask(path_to_counter(w), speed=base*(1 + n*0.25)),  # +0.25/级
                      DeliverTask(counter)])                  # 交付到柜台

    # 3) 顾客买单卖钱(无耐心:顾客不会愤怒离场)
    while counter.has_food() and has_waiting_customer():      # 容量 = customer_slots + tables
        c = pop_customer()
        gain = base_profit * station_milestone_mult(st)       # 真实倍率在工位里程碑 ×3..×100
        gain *= 16 if c.is_golden else 1                     # 药水触发 → ×16(金色乘子)
        gain *= ascend_multiplier()                           # 养成乘区(装备/宠物/神器)
        money += gain
        spawn_new_customer()                                  # 立即补位(无流失)

    # 4) 外卖运输:批量周期物流(主题城)
    for tr in transports:
        tr.run_cycle(dt)   # 到达 → 装满最大载客量 → 满后发车

# ========== 玩家主动介入:随时点击升级,立刻见效 ==========
def on_player_upgrade(kind, target):
    cost = upgrade_price(kind, target.level)                  # 见 03:指数成本
    if money >= cost:
        money -= cost
        apply(kind, target)        # 提速/雇工/加桌/拉客/利润里程碑 → 下一 tick 立即生效
节奏要点①+②+③ 是秒级自动循环(离线也按 10% 折算跑),保证挂机有进展; on_player_upgrade 是玩家唯一主动操作,每次点击下一 tick 立即体现,这是"即时正反馈"的实现层。

收入节奏:密集小台阶 + 稀疏大跳档

收入节奏:工位累加 + 里程碑跳档
新工位上线让收入台阶式累加(虚线),里程碑 ×10 则在某一刻把整条曲线顶上一个量级(红色虚线)——密集小台阶 + 稀疏大跳档正是这层节奏设计的核心。

⑤ 设计意图 / 可复用结论

数值层 / 表现层分离任务调度是"无数值的纯逻辑层",把配置数值(工人数/速度/周期/容量)翻译成屏幕上工人跑来跑去的动效。 它本身不配数,却是所有数值的"表现出口",也是放置游戏"看着小人忙活"的爽感来源。 可复用:把"数值层"和"调度/表现层"彻底分离——数值表只管参数,状态机只管把参数演成动作,两边各自可调、互不污染。

订单与小费(Order / Tips)—— 收入的两个口子

① 设计目标

主收入(卖菜)之外,给一个轻量的副收入口子(小费),既增加"工人收钱"的动作可读性,又给玩家一个额外的可优化点。

② 机制

订单 = 一笔订单(顾客的需求),完成即触发收入结算。小费:工人交付后通过收小费任务单独收取(见 §七任务链);小费位是布局的运行时数据。

③ 数据与公式

收入主公式(承 03 经济与数值):

单笔收入 = base_profit × 工位里程碑倍率(×3..×100) × 养成乘区 × (金色 ? 16 : 1)

小费为附加结算项(由收小费任务结算,按订单比例的小额附加,客户端无独立倍率表)。 希腊隐形顾客的订单量乘子 = 3.0,说明个别特殊订单可放大单笔订单量。

④ 平衡与节奏

小费作为副口子,量级远小于主收入,主要服务"工人收钱"的动作反馈与微量优化,不改变经济主轴

⑤ 设计意图 / 可复用结论

动作可读性订单是收入结算的触发单位,小费是动作可读性的副产品。 把"收钱"拆成可见的独立动作(工人专门跑去收小费),强化了放置游戏"看小人忙活"的满足感。 可复用:主收入之外加一个量级很小、但有独立动作表现的副收入口,性价比极高地提升了过程可读性。

新手引导(Tutorial)—— ECS 步骤状态机,数据不在配置里

① 设计目标

引导要解决两件事:把微循环(§一~§八)教会新玩家,以及每上一个新系统(宠物/神器/活动)都能补一段专项教学。Eatventure 的答案不是一条巨型脚本,而是一套可复用的 ECS 步骤状态机框架——反编译代码里共 ~113 个 Tutorial* 类,同一框架挂出十来条各自独立的专项教程线。

② 机制

  • 实体挂上 TutorialComponent(空标记组件)即进入"教程态";当前进度存 TutorialStepComponent.Value(一个 int 步骤号)。
  • 组件的 Added/Removed 带事件标注,由 TutorialEventSystem / TutorialStepEventSystem 等 4 个响应式事件系统广播给监听者列表(ITutorialListener / ITutorialStepListener 等 4 个接口)。
  • UI 侧 TutorialView / TutorialStepView 实现监听接口,按 _showOnTutorial 开关和 _tutorialSteps(步骤号白名单)决定显隐——"到第 N 步才亮这个按钮"。
  • 每条专项教程 = 一串 Begin/End 系统:抽象基类 FeatureTutorialStepBeginSystem(Feature 名 + Step 号 + Begin)启动某步,FeatureTutorialStepEndSystem<T>(EndTutorialStep)在条件满足时推进到下一步。

③ 数据与结构(来自反编译代码)

引导进度直接写进存档 TutorialSavegame,全部字段只有 5 个——每条教程线一个进度位,没有统一的步骤配置表:

// TutorialSavegame 全部字段
主动技教程完成    ActiveSkillTutorialComplete   // bool
宠物合成教程步骤  PetMergeTutorialStep          // Nullable<int>,步骤号
宠物商店教程已示  PetShopTutorialShown          // bool
俱乐部通知已示    ClubNotificationShown         // bool
酿造锅教程步骤    BrewKettleTutorialStep        // int,步骤号

步骤号是代码内枚举。以最长的一条(酿造锅活动教程 BrewKettleTutorialStep,14 步)为例:

0 解锁酿造锅 → 10/11 等药水解锁·打开锅 → 20 开始酿造 → 30 等酿造完成 →
40/50 开锅领药水 → 60/61 打开在用药水页 → 70 等首枚铜牌 → 80/90 打开活动金库页 → 100 首次金库升级 → 110 End

步骤号按 10 间隔留空(0/10/11/20/…/110),中途可插新步骤而不重排。宠物合成(PetMergeTutorialStep,-1~2)/宠物商店(PetShopTutorialStep,-1~3)同构但更短。

引导的"手指/高亮"表现由一组专用视图承担:

关键字段作用
TutorialIndicatorViewArrowTransform(RectTransform)+ 动画序列 + 两个 Vector2 端点UI 箭头在两点间往返摆动(OnEnable 起 / OnDisable 停)
TutorialIndicatorWorldBehaviour动画序列 + 两个 Vector3 端点同款箭头的世界空间版,指向场景内目标
FullScreenTutorialUiComponentAssignedTutorialEntityRef全屏引导 UI 绑定到具体教程实体
Spotlight 系统组RestaurantUpgradeTutorialRemoveSpotlightOn*System餐厅升级引导的聚光灯高亮及其移除时机

另有 TutorialCheatSystem(可整线关闭主动技/神器/人物/装备箱教程)——开发调试与老玩家跳过用。

④ 平衡与节奏:主线之外的专项教程线

除主线新手期外,每个中后期系统上线时各挂一条独立教程线(类名前缀即功能): 酿造锅活动(BrewKettle*,14 步最长)、人物(Character*)、宠物合成/宠物商店(PetMerge*/PetShop*)、 主动技(ActiveSkill*)、神器(Artifact*)、装备箱(EquipmentChest*)、餐厅购买/餐厅升级(RestaurantBuy*/RestaurantUpgrade*)、 探索(Discovery*)、家园(HomeMeta*)。其中 4 条在客户端留有视图挂点配置:

配置文件顶层字段对应功能
ArtifactUpgradeTutorialButtonView.jsonTutorialButton / RegularButton神器升级按钮引导:教程态换成引导版按钮
RestaurantUpgradesTutorialPanelView.jsonTutorialView餐厅升级面板引导
RestaurantUpgradesTutorialView.jsonTutorialView + Target餐厅升级条目引导(Target 指向具体升级项)
RestaurantUpgradesDisableScrollTutorialView.jsonTutorialView ×2引导期间禁用面板滚动(防误滑离开目标)

主线新手期本身则没有独立步骤表——首城被当作"教学母版"逐关打磨(一关引入一个新维度,甚至跑"首城延长"A/B 实验),见 02 进度结构

诚实标注引导步骤的具体序列/触发条件/文案未在客户端配置中导出——上面 4 个 config 只是视图挂点,真正的步骤逻辑硬编码在各 Begin/End 系统内(疑似部分受服务端/AB 配置控制)。细节已列入 附录 B 节缺口清单

⑤ 设计意图 / 可复用结论

引导即基础设施引导不是一次性脚本,而是永久基础设施。 "组件标记 + int 步骤号 + 事件广播 + 监听显隐"这一套通用框架,让每个新系统的教学成本从"写一条脚本"降到"挂组件 + 排步骤号 + 各写一对 Begin/End 条件";进度按教程线分字段存档,互不干扰,还能被 Cheat 系统整线跳过。 可复用:长线运营的游戏应把引导做成可挂载的框架(步骤号留间隔以便插步),而非录死的新手流程——否则每上一个新系统都要重写引导。

本篇小结:这层的设计哲学

子系统一句话本质数据落点
工位 Station产能单位,"频率"维度工位配置(升星上限 5) / station_profit_milestones.csv
菜品 Item纯内容皮,数值寄生工位菜品配置(163,无数值字段) / 菜品-餐厅映射表
顾客 Customer无耐心收银终端,金色×16靠药水顾客配置(12,金色乘子=16,无耐心)
工人 Worker纯外观,数值全 per-restaurant,移速恒+0.25工人配置(20,字段全为显示名) / 工人名字库(34)
堂食 Tables产能下游闸门,逼供需配平restaurant_layout.csv / 区域顾客位
运输 Transport主题城物流,用"容量×周期"差异化运输配置(15,基础速度=3.0)
任务调度 Task无数值纯逻辑层,把参数演成动作运行时逻辑(7 类原子任务) + 区域可行走网格
订单/小费 Order/Tips收入结算单位 + 动作可读性副产品收入公式(base×里程碑×养成) + 收小费任务
新手引导 TutorialECS 步骤状态机框架,专项教程各挂一线代码内枚举 + TutorialSavegame(5 字段,无步骤配置表)

三条贯穿全篇的设计取舍

1 · 数值与皮分离

菜品/工人/顾客都是"纯外观皮 + 外置数值"。海量内容变体(163 菜 / 20 工人 / 12 顾客)跨城自由复用,数值统一外置(工位里程碑 + per-restaurant 升级线),内容产能与数值平衡彻底解耦。

2 · 频率与价值分离

工位管"出餐频率",里程碑管"每单价值";用几何公比 + 少量常量撑起跨数十数量级的经济,配置极省、调参极易。

3 · 挂机无惩罚 + 点击即反馈

砍掉顾客耐心系统(离线不流失),把暴利体验(金色×16)外移到可主动触发的药水乘区;点击升级下一 tick 立即生效,自动循环离线按 10% 折算——两个时钟叠加,挂机与在线各得其所。

承接上层如何把这层"放大"(养成乘区)、如何用城市/餐厅给它"长线骨架"、成本公式的完整推导,分别见 02 进度结构 / 03 经济与数值 / 04 养成系统