这是《小游戏开发实战》五卷本的第五卷,也是最后一卷。卷一回答了「做什么、给谁做、怎么算账」,卷二回答了「怎么把它做出来,并且做得手感对、跑得动」,卷三回答了「怎么上线、怎么变现、怎么活得久」,卷四回答了「钱花出去之后后台长什么样、账怎么对、资质怎么办」,这一卷回答剩下的那个问题:同一款游戏,怎么发到不是中文的平台上,卖给不说中文的人。它不讲 3D、不讲原生 App 发行、不讲引擎 API、不讲服务端架构,它讲的是把「一个市场、一种语言、一套规则」的假设拆掉之后,代码、资源和账目各自要怎么改。
卷五《跨平台发行与出海》回答四个问题:海外有哪些平台、条款怎么算、怎么选(第 1–4 章),多语言与文化适配怎么落到工程上(第 5–8 章),数据合规、归因新政、跨境资金与风控怎么过(第 9–12 章),出海买量、榜单竞品、案例与收官(第 13–16 章)。贯穿全书的仍是虚构的轻度小游戏 《合成小岛》(merge-island:合成 + 放置 + 关卡 + 装扮)与工具链 pebble(config/ + sim/ Python + core/ TypeScript + web/ 单文件 HTML)。卷四目录
把这款游戏当成一门生意经营,这一卷把它推到另外五个平台上。
这套书与站内既有内容的分工
站内已经有不少相邻内容,写清楚分工比重复写一遍更有价值。下面七处边界是本卷最容易混淆的,务必分清:
- 独立游戏多语言本地化指南 是本卷最大的撞车源(近 1500 行)。它是本地化行业与采购口径:怎么找译员、怎么分工、怎么报价、怎么验收。本卷取的是工程与平台接入视角:i18n 资源管线怎么设计、语言包怎么加载与回退、伪本地化怎么自动检出溢出、平台 SDK 差异怎么抽象。第 5–7 章只在首段外链它并写明分工,不重写采购与行业流程。
- 独立游戏出海合规与税务风险清单 是合规风险清单口径。本卷第 9、11 章只做工程落点与表单清单:同意管理怎么落到代码、税务表单有哪些、W-8BEN 之类的表单在什么条件下触发,不提供法律或税务意见。
- 独立游戏全球资金与多币种结构 讲的是资金架构与主体安排。本卷第 11 章做的是可跑的汇率、手续费与到账周期模型,同一份配置能算出「哪个收款方式到账更快、手续费吃掉多少」,不重写资金架构。
- Steam 发行专题 有 166 篇,那是 PC 买断制发行口径。本卷第 1.1 节显式对照「为什么 H5 小游戏不走 Steam」,之后不再重复 PC 发行流程。
- H5 游戏产业全景 是产业综述口径。本卷第 1.1 节外链它,只取其中与海外平台条款相关的部分拆成可对接的矩阵与可跑的对比模型。
- 卷三《上线、变现与长线运营》 讲国内口径的广告变现、买量与长线运营。本卷第 4、8、13 章接着讲海外口径:Web 广告形态与 H5 广告网络、分语言指标口径、海外渠道与 ROI 止损,不重做卷三的变现模型与素材设计框架。
- 卷四《商业运营实战》 讲国内口径的投放后台、聚合 SDK、移动归因、资质与结算。本卷第 10 章与卷四第 4 章的分工是:卷四讲归因窗口与三方对账,本卷讲 iOS 侧的 ATT / SKAdNetwork 链路与无 IDFA 时代的替代方案。
一句话:本卷做的是「同一款游戏怎么发到多个海外平台、卖给不说中文的人」,不是「本地化行业报告」,也不是「出海法律意见书」。
明确不在本卷范围内
为了让边界清楚,下面这些这一卷不讲:
- 3D 渲染与美术管线(模型、骨骼、shader、美术生产流程)。
- 原生 App / 主机 / Steam 发行(站内已有 Steam 发行专题 ,那是 PC 平台口径,与本卷的 H5 小游戏平台口径不同)。
- Cocos / Godot / Defold 等引擎的 API 教程(站内已有专书)。
- 服务端架构(房间服、匹配、跨服;站内已有 《MMO 服务器开发》四卷本 )。
- 做「小游戏平台 / 创作工具」本身(站内已有 game-engine 与 minigame 两个专题)。
- 真实平台后台数据、真实审核结果、真实收款到账记录、真实税务结论(X,需真实业务环境,命令行不可复现,正文每处显式标注)。
- 具体法律或税务意见(合规章只给可核对的规则清单与自查项,不代替律师或税务师意见)。
可运行性口径
本卷与卷一同用一套六档标注,代码块头部注释里写着它属于哪一档:
| 层 | 含义 | 怎么验证 |
|---|---|---|
| S 仿真层 | Python 数值仿真:多平台分成对比、分语言指标、汇率与到账周期、本地化成本、无 IDFA 归因替代、海外投放 ROI 与止损、反作弊阈值 | /opt/homebrew/bin/python3 sim/<name>.py --config config/ --out out/,产出 JSON + CSV + SVG |
| P 内核层 | TypeScript 配置驱动逻辑内核:i18n 资源加载与回退、平台抽象层与渠道配置、构建矩阵产物管理、日期/数字/货币格式化、伪本地化检测、同意管理、地区准入与反作弊 | node --test 'core/test/g<章号>_*.test.ts'(Node 26 原生跑 TS,零依赖) |
| W 网页层 | 单文件 HTML 原型:文案膨胀与 UI 适配(第 5.3 节)、伪本地化与溢出检测(第 7.1 节) | node web/build_g05_text_fit.mjs 产出 HTML,再 NODE_PATH=/opt/homebrew/lib/node_modules node web/verify_g05_text_fit.mjs web/dist/g05.html 无头验收(第 7.1 节同理换 g07) |
| D 静态层 | 平台能力矩阵、审核清单、合规清单、税务表单清单、榜单结构、渠道口径 | 仅 schema / lint 校验 |
| X 不可复现 | 真实平台后台、真实审核结果、真实收款到账、真实税务结论 | 正文每处显式标注「需真实业务环境,命令行不可复现」 |
| B 基准 | 多平台口径可比性、本地化成本偏差、归因替代方案稳定性、海外 ROI 关停集合 | 产出 JSON,软告警不硬失败 |
本卷延续前四卷的两条核心主张:一份 config,三种消费(Python 仿真、TS 内核、浏览器原型读同一份数字,故 config/ 里禁浮点、TS 侧幂运算用 BigInt、除法一律整数地板除);一份逻辑,两种宿主(逻辑只依赖 Host 抽象,mock 宿主与真机宿主逐帧一致,故 core/ 里禁用 Math.random(),随机数一律可播种)。
两条纪律同样适用:不编造平台后台数字——所有真实平台侧数字(后台流水、审核时长、分成到账、地区限制)一律标 X,正文只写「公开可观察机制」并标注观察时点,不虚构具体数值;仿真数字只作「同机相对量级」——所有 S 层结果来自本机实跑,只用于比较同一台机器上不同参数配置的相对高低,禁止写成「提升 N 倍」或「必然回本」这类断言。
卷五结构总览(16 章)
| 章 | 主题 | 可运行性层级 |
|---|---|---|
| 1 | 海外小游戏平台格局 | D + S + B |
| 2 | 平台接入与上架 | D + P + X |
| 3 | 一套代码多平台 | P + S |
| 4 | 海外变现 | D + S + B |
| 5 | 多语言资源管线 | P + S + W |
| 6 | 文化与美术本地化 | D + P + S |
| 7 | 本地化质量 | P + W + D + S |
| 8 | 多语言运营 | S + D + P + B |
| 9 | 数据合规的工程落地 | D + P |
| 10 | 归因与隐私新政 | D + P + S + B + X |
| 11 | 跨境结算与资金 | D + S + P + X |
| 12 | 出海风控 | D + P + S + X |
| 13 | 海外买量与素材 | D + P + S + B + X |
| 14 | 海外榜单与竞品 | D + P + S |
| 15 | 案例:把《合成小岛》发到五个海外平台 | D + P + S + X |
| 16 | 出海收官 | D + P + S + B |
全书目录
前置
| 篇目 | 核心内容 |
|---|---|
| 目录 | 本页:定位、七处分工、可运行性口径与全书结构 |
| 附录 F:全书公式、参数与数据集索引 | pebble/ 全部文件索引、g<章号>_ 命名约定与六层复现命令 |
第一部分:海外平台矩阵与接入(第 1–4 章)
第 1 章 海外小游戏平台格局——先看清地图再决定从哪上
- 1.1 平台分层与流量结构 :平台分层与流量结构(D+S)
- 1.2 各平台分成与结算条款 :各平台分成与结算条款(S+D)
- 1.3 平台选择与组合策略 :平台选择与组合策略(S/B)
第 2 章 平台接入与上架——每家平台的 SDK 和审核都不一样
- 2.1 SDK 与广告 API 接入差异 :SDK 与广告 API 接入差异(D+P)
- 2.2 上架资料、审核与驳回 :上架资料、审核与驳回(D+P+X)
- 2.3 平台专属能力:存档、排行榜与多人 :平台专属能力(D+P)
第 3 章 一套代码多平台——本卷的核心主张
- 3.1 平台抽象层与渠道差异化配置 :平台抽象层与渠道配置(P)
- 3.2 构建矩阵与产物管理 :构建矩阵与产物管理(P)
- 3.3 多平台版本一致性与回滚 :版本一致性与回滚(P+S)
第 4 章 海外变现——没有内购的平台怎么活
- 4.1 Web 广告形态与 H5 广告网络 :Web 广告形态与 H5 广告网络(D+P)
- 4.2 无内购平台的纯 IAA 结构 :无内购平台的纯 IAA 结构(S)
- 4.3 多平台收入对比与配比 :多平台收入对比与配比(S/B)
第二部分:本地化的工程实现(第 5–8 章)
第 5 章 多语言资源管线——把文案从代码里拿出来
- 5.1 i18n 资源结构与键设计 :i18n 资源结构与键设计(P)
- 5.2 语言包加载、回退与体积 :语言包加载、回退与体积(P+S)
- 5.3 文案膨胀与 UI 适配 :文案膨胀与 UI 适配(P+W)
第 6 章 文化与美术本地化——不只是翻译
- 6.1 文化禁忌与符号审查 :文化禁忌与符号审查(D+P)
- 6.2 美术与素材的本地化变体 :美术与素材的本地化变体(D+S)
- 6.3 日期、数字、货币与 RTL :日期、数字、货币与 RTL(P)
第 7 章 本地化质量——在母语玩家看到之前先自己发现
- 7.1 伪本地化与溢出检测 :伪本地化与溢出检测(P+W)
- 7.2 语言 QA 与母语审校 :语言 QA 与母语审校(D+P)
- 7.3 本地化成本与排期 :本地化成本与排期(S)
第 8 章 多语言运营——分语言看数据,别只看总数
- 8.1 分语言指标口径 :分语言指标口径(S)
- 8.2 分语言活动与素材 :分语言活动与素材(D+P)
- 8.3 小语种取舍 :小语种取舍(S/B)
第三部分:出海合规与资金(第 9–12 章)
第 9 章 数据合规的工程落地——把法条翻译成开关
- 9.1 GDPR / CCPA 的工程落点 :GDPR / CCPA 的工程落点(D+P)
- 9.2 COPPA 与儿童向游戏的限制 :COPPA 与儿童向游戏的限制(D+P)
- 9.3 同意管理与数据出境 :同意管理与数据出境(D+P)
第 10 章 归因与隐私新政——iOS 侧那条越来越窄的链
- 10.1 ATT、IDFA 与 SKAdNetwork :ATT、IDFA 与 SKAdNetwork(D+P+X)
- 10.2 无 IDFA 时代的归因替代 :无 IDFA 时代的归因替代(S+B)
- 10.3 隐私沙盒与聚合上报 :隐私沙盒与聚合上报(D+P)
第 11 章 跨境结算与资金——钱怎么从平台回到账上
- 11.1 平台收款方式与门槛 :平台收款方式与门槛(D+P)
- 11.2 汇率、手续费与到账周期 :汇率、手续费与到账周期(S)
- 11.3 税务表单与合规(W-8BEN 等) :税务表单与合规(D+P+X)
第 12 章 出海风控——有些地区上不了,有些人不是玩家
- 12.1 内容与版权的地区差异 :内容与版权的地区差异(D+P+X)
- 12.2 制裁与地区可用性 :制裁与地区可用性(D+P+X)
- 12.3 反作弊与刷量 :反作弊与刷量(P+S)
第四部分:出海买量、案例与收官(第 13–16 章)
第 13 章 海外买量与素材——同一套素材,换个市场就不合规了
- 13.1 海外渠道与投放口径 :海外渠道与投放口径(D+P+X)
- 13.2 素材本地化与合规 :素材本地化与合规(D+P)
- 13.3 海外投放 ROI 与止损 :海外投放 ROI 与止损(S+B)
第 14 章 海外榜单与竞品——别人在榜上,为什么
- 14.1 各平台榜单结构 :各平台榜单结构(D+P)
- 14.2 竞品拆解与本地化机会 :竞品拆解与本地化机会(S)
- 14.3 品类在海外市场的差异 :品类在海外市场的差异(S)
第 15 章 案例:把《合成小岛》发到五个海外平台——把前 14 章装配成一条路径
- 15.1 平台组合与接入时间线 :平台组合与接入时间线(D+P)
- 15.2 本地化与合规落地 :本地化与合规落地(D+P)
- 15.3 多平台数据表现与迭代 :多平台数据表现与迭代(S+X)
第 16 章 出海收官——把这一卷收成一份方案
- 16.1 出海发行方案装配 :出海发行方案装配(D+P)
- 16.2 多平台仿真与验收 :多平台仿真与验收(S+P+B)
- 16.3 五卷总收官 :五卷总收官(D+S)
附录
| 篇目 | 核心内容 |
|---|---|
| 附录 F:全书公式、参数与数据集索引 | 本卷公式与参数索引、g<章号>_ 命名约定、六层复现命令 |
三条阅读路径
路径 A:平台接入课(第 1–4 章顺序读)
从海外平台的分层与流量结构开始,经各平台分成与结算条款、平台选择与组合、SDK 与广告 API 差异、上架审核与驳回、平台专属能力,到平台抽象层、构建矩阵与多平台收入配比。这条路径回答「发到哪几家、条款怎么算、代码怎么改一次发五家」。读完你能说清五个平台的条款差异,拿出一份渠道配置表,并用一段可跑的仿真说明为什么某家平台看起来单价高、到手却更少。
路径 B:本地化课(第 5–8 章顺序读)
从 i18n 资源结构与键设计开始,经语言包加载与回退、文案膨胀与 UI 适配、文化禁忌与美术变体、日期数字货币与 RTL、伪本地化与语言 QA,到分语言指标与小语种取舍。这条路径回答「怎么把一款中文游戏变成五语言游戏,并且证明它没撑破界面」。读完你能拿出一个可跑的伪本地化检测器、一份语言 QA 闸门,和一张本地化成本排期表。
路径 C:合规、资金与收官课(第 9–16 章顺序读)
从 GDPR / CCPA 的工程落点开始,经 COPPA 与儿童向限制、同意管理、ATT 与无 IDFA 归因、隐私沙盒、跨境收款与税务表单、内容版权与地区可用性、反作弊,到海外买量与止损、榜单竞品、五平台案例与出海方案装配。这条路径回答「出海那些非技术的事怎么落到代码和账上,最后怎么收尾」。读完你能拿出一份可交付的出海发行方案,并用多平台仿真验收证明它自洽。
常见问题速查
| 你想解决的问题 | 看哪节 |
|---|---|
| 海外有哪些 H5 小游戏平台、各占多少流量? | 1.1 |
| 各平台分成和结算条款差在哪? | 1.2 |
| 首发选哪几家、怎么组合? | 1.3 |
| 各家的 SDK 和广告 API 有什么区别? | 2.1 |
| 上架要交什么、为什么被驳回? | 2.2 |
| 存档、排行榜、多人这些平台能力怎么接? | 2.3 |
| 一套代码怎么发五个平台? | 3.1 、3.2 |
| 多平台版本不一致、要回滚怎么办? | 3.3 |
| 平台没有内购,纯靠广告怎么活? | 4.1 、4.2 |
| 多平台收入怎么配比? | 4.3 |
| i18n 的键怎么设计、语言包怎么组织? | 5.1 |
| 语言包加载慢、回退不对怎么办? | 5.2 |
| 德文俄文把按钮撑破了怎么办? | 5.3 、7.1 |
| 哪些符号在某些地区不能用? | 6.1 |
| 美术要不要做本地化变体? | 6.2 |
| 日期、数字、货币和 RTL 怎么处理? | 6.3 |
| 怎么在母语玩家看到之前发现文案问题? | 7.1 、7.2 |
| 本地化要花多少钱、排多久? | 7.3 |
| 分语言的留存和付费怎么看? | 8.1 |
| 小语种值不值得做? | 8.3 |
| GDPR / CCPA 落到代码上是什么? | 9.1 |
| 儿童向游戏有什么额外限制? | 9.2 |
| 同意管理和数据出境怎么落? | 9.3 |
| iOS 上还能怎么归因? | 10.1 、10.2 |
| 隐私沙盒和聚合上报是什么? | 10.3 |
| 平台的钱怎么收、什么时候到账? | 11.1 、11.2 |
| 要填哪些税务表单? | 11.3 |
| 哪些地区上不了、哪些内容要按地区改? | 12.1 、12.2 |
| 怎么发现刷量和作弊? | 12.3 |
| 海外买量口径和国内差在哪? | 13.1 |
| 素材换个市场就不合规了怎么办? | 13.2 |
| 海外投放什么时候该止损? | 13.3 |
| 榜单是怎么排的、怎么挤进去? | 14.1 |
| 竞品怎么拆、本地化机会在哪? | 14.2 |
| 同一个品类在不同市场表现差多少? | 14.3 |
| 完整出海一次长什么样? | 15.1 、15.2 |
| 怎么把这一卷收成一份方案? | 16.1 、16.2 |
| 五卷本各自讲了什么、怎么拼起来? | 16.3 |
卷五工具链命名约定
本卷所有 pebble/ 文件一律用 g<章号>_ 前缀(如 config/g02_sdk_matrix.json、sim/g02_sdk_adapter_score.py、core/src/g02/、core/test/g02_*.test.ts、web/build_g05_text_fit.mjs),因为卷一的 ch 前缀、卷二的 e 前缀、卷三的 l 前缀、卷四的 o 前缀已被占用。这样 node --test 'core/test/g02_*.test.ts' 只会命中本卷第 2 章的测试,不会交叉匹配前四卷的 ch*.test.ts、e*.test.ts、l*.test.ts 与 o*.test.ts。五卷共用同一套 config/ 约定:禁浮点、整数地板除、随机数可播种,故卷五的平台分成模型与卷三的收入模型、卷四的结算模型可以放进同一个工作区一起跑。
注意前缀不要写成裸 g*:node --test 接收的是 glob 而非目录,且 economy 等文件名也以 e 开头,故必须写全 g<章号>_*.test.ts(如 g02_*.test.ts)。另外 web/ 层的文件名前缀不在首位(build_g05_… / verify_g05_…),清点脚本要同时认这两套命名,否则 web 层会被统计成 0。
完整文件索引、逐层复现命令与排错顺序见附录 F 。
在进入正文之前,先用下面这段 S 层环境自检脚本确认运行时齐备——它同时适用于卷一至卷五,是整套书稿的第一条可运行命令。把它保存为 pebble/sim/ch00_env_check.py 后运行 /opt/homebrew/bin/python3 sim/ch00_env_check.py,会打印解释器路径、numpy / pandas 版本与 Node 版本,任一不满足即非 0 退出。
# file: sim/ch00_env_check.py
# tier: S
# verify: /opt/homebrew/bin/python3 sim/ch00_env_check.py
"""环境自检:确认《小游戏开发实战》三卷需要的运行时都在,并打印 pebble 的能力阶梯。
本机有两个 python3,不要混:
/opt/homebrew/bin/python3 = 3.14.6(带 numpy / pandas / PIL),S 层仿真一律用它;
/usr/bin/python3 = 3.9.6(系统自带,无 numpy/pandas),只能跑最朴素的脚本。
"""
from __future__ import annotations
import os
import shutil
import subprocess
import sys
EXPECT_PY = "/opt/homebrew/bin/python3"
def main() -> int:
ok = True
# /opt/homebrew/bin/python3 是符号链接,比较时解析到真实二进制再判断
real = os.path.realpath(sys.executable)
print(f"python {sys.version.split()[0]} ({real})")
if real != os.path.realpath(EXPECT_PY):
print(f" 注意:正文脚本一律用 {EXPECT_PY},当前解释器不同")
try:
import numpy
import pandas
print(f"numpy {numpy.__version__}")
print(f"pandas {pandas.__version__}")
except ImportError as e: # noqa: BLE001
ok = False
print(f"FAIL 缺依赖:{e}(S 层需要 numpy 与 pandas)")
node = shutil.which("node")
if not node:
ok = False
print("FAIL node 未安装(P 层需要 Node 26 或更高)")
else:
ver = subprocess.run([node, "-v"], capture_output=True, text=True).stdout.strip()
major = int(ver.lstrip("v").split(".")[0])
note = "" if major >= 26 else " (低于 26,原生 TypeScript 不可用)"
print(f"node {ver}{note}")
ok = ok and major >= 26
print("pebble 能力阶梯:S 仿真 / P 内核 / W 网页 / D 静态 / X 不可复现 / B 基准")
print("OK 环境就绪" if ok else "FAIL 环境不满足")
return 0 if ok else 1
if __name__ == "__main__":
raise SystemExit(main())
这段脚本与卷一同源,是整套书稿的第一条可运行命令;卷五的 g<章号>_ 脚本都建立在它验证过的同一套运行时之上。完整文件索引与逐层复现命令见附录 F
。
继续阅读
探索更多技术文章
浏览归档,发现更多关于系统设计、工具链和工程实践的内容。