手把手教程:从零搭建一个恐怖生存世界
TIP
这篇教程会用到 画布上手 里的那些操作:点一行展开、卡底下的 还可以加、顶栏的 试玩。还没看过的话先去看那一页。
我们要做一个恐怖生存游戏,灵感来自 「No, I'm not a Human」。设定很简单:末日来了,外面有伪装成人类的「访客」。你一个人在家,每天晚上都有人来敲门。透过猫眼判断对方是人还是怪物,做出选择,活过 14 个夜晚。
一路上你会用到设定、变量、AI 写的界面和关键词设定。
第一步:新建一个世界
点左边的 创建,选 空白项目,再选 画布。然后在左上角 画布 开关旁边的名字框里填上名字:
- 名字:
The Imposters
第二步:写角色设定
在这个游戏里,AI 不是在扮演某个角色,而是当 游戏主持人(GM):叙述场景、扮演所有 NPC、推动剧情。所以第一条设定要告诉 AI 它是谁、要干什么。
点 角色和世界 下面那一行,把它展开。

| 字段 | 值 |
|---|---|
| 名称 | 游戏主持人设定 |
| 发送方式 | 指令(默认就是它,AI 会把这条当成要遵守的规则) |
在 内容 里写:
你是一个公平公正的恐怖生存游戏主持人(GM)。游戏持续 14 天(14 个夜晚)。
设定:末日已经降临。城市被「访客」占据,它们看起来和人类一模一样。玩家独自在家。每晚都有人来敲门求助。玩家必须透过猫眼观察、隔着门对话,用各种方法判断来访者是人类还是怪物,再决定要不要开门。
你的职责:
- 每晚描述敲门者的外貌和举动
- 公平地给出线索,但不要直接揭示其身份
- 白天让玩家自由探索公寓、使用道具、打电话
- 保持悬疑紧张的氛围
- 每次回复结尾给出 3–5 个建议选项(用 A/B/C/D/E 格式)
每次回复以阶段标题开头:
- 夜晚:🌑 **第 X 夜**
- 白天:☀️ **第 X 天**几个要点:
- 这条设定在 角色和世界 里,所以每回合都会发给 AI。核心设定必须放在这里
- 发送方式 = 指令:AI 会把它当成系统指令,而不是角色说的话。发送方式 在 什么时候发给 AI → 高级 里,不过这里什么都不用改
第三步:写开场白
点 开场白 下面的框,写:

🌑 **第 1 夜**
电视屏幕上满是雪花噪点。一段紧急广播用机械的声音不断重复着同样的警告:「……目前已确认的访客特征:牙齿异常整齐、如瓷器般洁白。请居民保持警惕,切勿为陌生人开门……」
你一个人待在公寓里。地方不大:浴室、客厅、卧室、书房、厨房,还有一间储物间。前门上有一个猫眼。储物间里有一把手枪。书房里有一部座机。冰箱里还有几天的食物。
窗外,街道空无一人。至少看起来是这样。
然后,敲门声响了。
***咚……咚……咚。***
一个年轻女人的声音从门外传来,发着抖,带着哭腔:「求求你……让我进去……外面有东西在追我……」
**建议选项:**
A. 开门让她进来
B. 隔着门和她说话,问几个问题
C. 拒绝,让她离开
D. 透过猫眼仔细观察她
E. 其他(输入你想做的任何事)好的开场白有这几样:
- 马上告诉玩家自己在哪、发生了什么
- 讲清楚手头有哪些资源、周围是什么环境
- 结尾抛出一个决定,逼玩家立刻行动
第四步:建游戏变量
点卡底下 还可以加 里的 + 变量。点 5 次,下面每个变量建一个。每个变量都改一下最上面的名字,选 类型,设好 初始值 和 范围,再写 行为规则。
第六步的界面代码要靠 ID 来读变量。新变量的 ID 是随机的,所以要展开变量设置最底下的 高级,填上表里的 ID,点 应用。

1. 生命
| 字段 | 值 |
|---|---|
| 名字 | 生命 |
| 类型 | 数值 |
| 初始值 | 3 |
| 范围 | 0 到 5 |
| 行为规则 | 玩家被访客攻击或犯下致命错误时减 1。如果玩家放苍白陌生人进门,或承认自己一个人在家,直接归零。归零即游戏结束。 |
| ID(在高级里) | player_hp |
2. 体力
| 字段 | 值 |
|---|---|
| 名字 | 体力 |
| 类型 | 数值 |
| 初始值 | 3 |
| 范围 | 0 到 8 |
| 行为规则 | 给访客搜身和开枪各消耗 1 点。猫眼观察和对话不消耗。白天恢复到上限。体力为 0 时不能做消耗体力的行动。 |
| ID(在高级里) | energy_current |
3. 天数
| 字段 | 值 |
|---|---|
| 名字 | 天数 |
| 类型 | 数值 |
| 初始值 | 1 |
| 范围 | 1 到 14 |
| 行为规则 | 每过完一个完整的昼夜加 1。第 14 天结束时游戏结束。 |
| ID(在高级里) | game_day |
4. 阶段
| 字段 | 值 |
|---|---|
| 名字 | 阶段 |
| 类型 | 文字 |
| 初始值 | Night |
| 可选值 | Night、Day |
| 行为规则 | 值是 "Night" 或 "Day"。夜晚处理敲门事件,白天自由探索房间、使用道具。 |
| ID(在高级里) | game_phase |
5. 持枪状态
| 字段 | 值 |
|---|---|
| 名字 | 持枪 |
| 类型 | 开关 |
| 初始值 | 开(true) |
| 行为规则 | 玩家开局就有一把手枪。开枪打访客消耗 1 点体力,但可能误伤人类。开枪后描写后果。 |
| ID(在高级里) | player_has_gun |
行为规则是什么?
行为规则 不是代码,是用大白话写给 AI 看的说明,告诉它什么时候该改哪个变量。把它当成给 AI 的小抄就好 φ(>ω<*)
第五步:变量到底是怎么变的
你刚建的每个变量都开着 精准追踪。新建的数值和开关变量默认就开着,文字变量填了 可选值 以后也会开。每一行上都能看到一个「精准」的小标。
开着精准追踪的时候,写故事的 AI 自己不改这些值。每次回复后,一个小助手会把刚才的剧情再读一遍,对照你写的 行为规则,决定每个值该不该变、变多少。数值每回合最多变 每回合最多降 / 每回合最多涨 那么多。这两项一开始都是 10,对这个游戏来说太大了。把 天数 的每回合最多涨设成 1,其它的不用动。
所以行为规则写得越清楚,追踪就越准。 回去看看你在第四步写的规则,确保每个变量都写清楚了「什么时候变、怎么变」。
如果你把某个变量的精准追踪关掉,就改由写故事的 AI 来改它:AI 会在回复最后写一条简短的指令。这个格式引擎会自己教给 AI。
指令在 AI 的输出里长什么样?
在 AI 回复的最后,你会看到类似这样的东西:
[player_hp: -1]
[energy_current: -1]这些就是指令。引擎会自动把它们提取出来执行,玩家看到的回复里不会出现。
更多指令语法
除了 +(加)和 -(减),还有 set(设成某个值)、toggle(翻转开关)等等。见 → AI 指令与宏
第六步:让它好看起来:AI 生成的界面
到这里你的世界已经能玩了。但玩家看到的只有纯文字。我们来做一个真有恐怖游戏感觉的界面,代码交给 AI 来写。
方法一:用创作助手(推荐)
- 点顶栏第二行右边的 创作助手
- 确认输入框下面的模式是 搭建
- 把下面这段发给它(可以直接复制):
把根组件(index.tsx)重写成一个末日恐怖生存风格的界面。
参考《No, I'm not a Human》的风格。
外层保持 `<Chat renderBubble={(msg) => ...} />`,让平台继续负责
输入框、流式光标和 swipe;我们只接管气泡的样式。
我需要这些效果:
1. 阶段标题:
- 如果 AI 回复里有「🌑 **第 X 夜**」,把它提取出来,渲染成 CRT 显示器风格的标题栏
(暗绿色发光文字,扫描线效果,轻微闪烁)
- 如果有「☀️ **第 X 天**」,渲染成暖色调的标题栏(琥珀色文字)
- 把标题从消息正文里去掉,单独显示
2. 敲门效果:
- 如果回复里有 ***三个星号包起来的粗斜体文字***,把它提取出来,渲染成
敲门动画:红色大字,带抖动效果
3. 底部 HUD 状态栏:
- 等宽字体,暗绿色背景
- 显示:⚡ 体力(energy_current 变量)、❤️ 生命(player_hp 变量)、
🔫/🚫 持枪状态(player_has_gun 变量)
- 紧凑的单行显示
4. 叙事文字区:
- 暗色背景(深绿黑),边缘有一点微光
- 浅绿色文字,行距宽一点,方便阅读
- 用 renderMarkdown 渲染
5. 选项按钮:
- 如果 AI 回复里有「建议选项:」或「**你的选择:**」,把选项
(A. B. C. D. E.)提取出来,渲染成可以点的按钮
- 点了就自动发送对应的选项
- 暗绿色调,鼠标悬停时变亮
6. 整体氛围:黑绿色 CRT 显示器的美感,低饱和度,压抑的末日感
我的变量:
- player_hp:生命,数值,0–5
- energy_current:体力,数值,0–8
- game_day:当前天数,数值,1–14
- game_phase:"Night" 或 "Day"
- player_has_gun:有没有枪,true/false- 创作助手会把代码写进 面板 → 前端代码。点顶栏中间的 玩家界面 看效果
- 想改?接着说,比如「敲门效果再夸张一点」「选项按钮太散了」。如果某一轮改坏了,点画布底部 AI 这一回合 那一条里的 撤销这一回合


方法二:用外部的 AI(Claude、ChatGPT 等)
如果你更想用别的 AI,有两种办法。
把它接到你的卡上。 点右上角 ⋮ 菜单里的 连接你的 AI,照着步骤做。接好以后,你的 AI 会直接改这张卡,上面那段需求原样发给它就行。见 连接你自己的 AI。
自己粘贴代码。 把上面的效果描述,连同最后附上的这段 Yumina 技术说明一起发给它:
Yumina 技术说明(写代码时请遵守这些规则):
- 根组件:导出 `export default function MyWorld() { return <Chat renderBubble={(msg) => ...} /> }`
- `<Chat />` 是平台提供的聊天积木,它负责输入框、消息
列表、流式光标;我们只通过 renderBubble 自定义每个气泡
- 在 renderBubble 里,msg 对象提供:`contentHtml`(预渲染好的 HTML)、`rawContent`
(原始文字)、`role`("user" / "assistant")、`messageIndex`、`isStreaming`、
`renderMarkdown(text)`(把 markdown 转成格式化的 HTML)
- useYumina() 提供变量,例如 useYumina().variables.player_hp
- useYumina().sendMessage(text) 以玩家身份发一条消息(用于可点击的选项)
- 内置 Icons 图标库(不用 import),例如 Icons.Heart、Icons.Zap
- 支持 Tailwind CSS 和 React hooks
- 用 useEffect + document.createElement("style") 注入动画
- React、Chat、useYumina、Icons 在沙盒里都是全局可用的,不用 import拿到代码以后:
- 打开 面板 → 前端代码,选中
index.tsx - 把代码粘进去(替换默认的
return <Chat />) - 面板显示 正常 就好了
你不需要看懂代码
粘进去以后面板显示 正常,就说明它在工作。如果显示 错误,把错误信息原样发回给 AI,让它修。
效果不是你想要的怎么办?
直接告诉 AI:「血条太细了,加粗一点」「背景换成纯黑」「加个闪烁效果」。来回几轮一般就对了。
第七步:写关键词设定
第二步那条设定每回合都会发。有些信息只在用得上的时候才需要发给 AI,这就是 关键词设定 的用处。
点 角色和世界 块右上角的 +,加一条新设定。展开它,再展开 什么时候发给 AI:取消勾选 始终发送,在 关键词 里填上关键词。这条设定会挪进 关键词设定 块。做下面三条:
1. 敲门规则
| 字段 | 值 |
|---|---|
| 名称 | 敲门事件 |
| 发送方式 | 指令 |
| 关键词 | 门、敲门、开门、敲 |
敲门事件规则:
- 每晚有 2–3 名访客,一个一个来
- 玩家可以:透过猫眼观察(免费)、隔门对话(免费)、要求搜身(消耗体力)、开门或拒绝
- 放人类进来 = 可能得到帮助 | 放访客进来 = 危险
- 描写敲门场景时保持悬疑,绝不直接揭示身份2. 猫眼观察
| 字段 | 值 |
|---|---|
| 名称 | 猫眼观察 |
| 发送方式 | 指令 |
| 关键词 | 猫眼、偷看、观察、看 |
猫眼观察规则:
- 只能看到来访者的头和上半身
- 描写重点:表情、牙齿、眼睛、皮肤纹理
- 访客的伪装有细微的破绽(牙齿整齐得不自然、瞳孔异常、皮肤纹理怪异)
- 人类有正常的瑕疵(蛀牙、黑眼圈、疤痕)
- 绝不直接揭示身份,只描写看到的东西3. 搜房间
| 字段 | 值 |
|---|---|
| 名称 | 搜房间 |
| 发送方式 | 指令 |
| 关键词 | 搜索、查看、翻找、探索、房间 |
搜房间规则(只限白天):
- 储物间:能找到手枪
- 厨房:食物补给,可以恢复少量体力
- 书房:电话,可以打电话打听消息
- 描写环境细节,营造不安感关键词触发是怎么工作的
AI 每次回复之前,引擎会扫一遍最近的消息。出现了对得上的关键词,对应的设定这一回合就会发给 AI。没人提到,AI 就看不到它,也不花 token。
扫最近几条消息,由 触发词往回看几条 决定:点卡底下的 Context,展开 高级。默认是 2,这个游戏设成 4 更好。
第八步:测试
点顶栏右边的 试玩。试玩会用你选的模型真的开一局,所以会消耗额度。玩几个回合,检查下面这几项。右边的 这回合 会写出每一回合背后发生了什么。
| 检查项 | 怎么确认 | 如果不对 |
|---|---|---|
| 开场白出现了 | 进去就自动显示第一条消息 | 检查 开场白 里有没有写字 |
| 自定义界面生效了 | 消息有 CRT 风格的阶段标题和 HUD | 检查 面板 → 前端代码 里的 index.tsx 有 renderBubble 的代码,并且显示 正常 |
| 数值会变 | 互动之后 HUD 的数字会更新;这回合里的「每个数」会写出某个值为什么变了、为什么没变 | 检查每个变量的行为规则写清楚没有 |
| 关键词设定会触发 | 提到「猫眼」后 AI 会按规则来;AI 收到了 里,它出现在「设定 · 这回合说到了」下面 | 检查关键词拼写和触发词往回看几条 |
测完点 结束试玩,回到画布。
第九步:填卡的信息
点画布右边的 封面与简介,会打开 卡的设置:
- 上传一张 封面图片(能传达恐怖氛围的图)。需要一张竖版的 手机 · 2:3 和一张横版的 电脑 · 16:9
- 写一段 描述,让玩家知道要玩的是什么
- 设 语言:选你的世界用的语言(比如
中文) - 点顶栏的 保存

第十步:发布
- 点顶栏右边的 未上线。它会先过一个简短的检查清单:有名字、有封面、有开场白、至少试玩过一次
- 点 发布上线。在对话框里加上 标签(
恐怖、生存、悬疑、互动小说),设好 内容模式(有限制 或 无限制)、可见范围,以及是否允许别人做可编辑的副本 - 确认你对内容有权利,点 发布上线
你的世界会进入审核。通过以后,玩家就能在发现页找到它了 ヽ(✿゚▽゚)ノ
你学到了什么
| 概念 | 你做了什么 |
|---|---|
| 设定 | 写了 GM 设定和开场白,这是 AI 表现的基础 |
| 变量 | 建了生命、体力、天数、阶段和持枪状态,每次回复后精准追踪 |
| 行为规则 | 用大白话告诉追踪小助手(或 AI)每个值什么时候变 |
| 界面 | 让 AI 生成了一个 CRT 风格的界面,自己一行代码没写 |
| 关键词设定 | 只在被提到时才发给 AI 的规则设定 |
还能做什么
- 行为:生命归零时自动触发死亡结局,不用指望 AI 记得
- 自定义 UI 指南:把消息做成对话气泡、视觉小说场景或者战斗日志
- 音频:加上 BGM 和音效,进地下室时自动换成诡异的音乐
- 条件设定:按变量的值来发设定,比如后期的剧情揭示
去 yumina.io 搜 「No, I'm not a Human」,就能玩到完整版。
