Skip to content

手把手教程:从零搭建一个恐怖生存世界 ​

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. 其他(输入你想做的任何事)

好的开场白有这几样:

  1. 马上告诉玩家自己在哪、发生了什么
  2. 讲清楚手头有哪些资源、周围是什么环境
  3. 结尾抛出一个决定,逼玩家立刻行动

第四步:建游戏变量 ​

点卡底下 还可以加 里的 + 变量。点 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 来写。

方法一:用创作助手(推荐) ​

  1. 点顶栏第二行右边的 创作助手
  2. 确认输入框下面的模式是 搭建
  3. 把下面这段发给它(可以直接复制):
把根组件(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
  1. 创作助手会把代码写进 面板 → 前端代码。点顶栏中间的 玩家界面 看效果
  2. 想改?接着说,比如「敲门效果再夸张一点」「选项按钮太散了」。如果某一轮改坏了,点画布底部 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

拿到代码以后:

  1. 打开 面板 → 前端代码,选中 index.tsx
  2. 把代码粘进去(替换默认的 return <Chat />)
  3. 面板显示 正常 就好了

你不需要看懂代码

粘进去以后面板显示 正常,就说明它在工作。如果显示 错误,把错误信息原样发回给 AI,让它修。

效果不是你想要的怎么办?

直接告诉 AI:「血条太细了,加粗一点」「背景换成纯黑」「加个闪烁效果」。来回几轮一般就对了。


第七步:写关键词设定 ​

第二步那条设定每回合都会发。有些信息只在用得上的时候才需要发给 AI,这就是 关键词设定 的用处。

点 角色和世界 块右上角的 +,加一条新设定。展开它,再展开 什么时候发给 AI:取消勾选 始终发送,在 关键词 里填上关键词。这条设定会挪进 关键词设定 块。做下面三条:

1. 敲门规则 ​

字段值
名称敲门事件
发送方式指令
关键词门、敲门、开门、敲
敲门事件规则:
- 每晚有 2–3 名访客,一个一个来
- 玩家可以:透过猫眼观察(免费)、隔门对话(免费)、要求搜身(消耗体力)、开门或拒绝
- 放人类进来 = 可能得到帮助 | 放访客进来 = 危险
- 描写敲门场景时保持悬疑,绝不直接揭示身份

2. 猫眼观察 ​

字段值
名称猫眼观察
发送方式指令
关键词猫眼、偷看、观察、看
猫眼观察规则:
- 只能看到来访者的头和上半身
- 描写重点:表情、牙齿、眼睛、皮肤纹理
- 访客的伪装有细微的破绽(牙齿整齐得不自然、瞳孔异常、皮肤纹理怪异)
- 人类有正常的瑕疵(蛀牙、黑眼圈、疤痕)
- 绝不直接揭示身份,只描写看到的东西

3. 搜房间 ​

字段值
名称搜房间
发送方式指令
关键词搜索、查看、翻找、探索、房间
搜房间规则(只限白天):
- 储物间:能找到手枪
- 厨房:食物补给,可以恢复少量体力
- 书房:电话,可以打电话打听消息
- 描写环境细节,营造不安感

关键词触发是怎么工作的

AI 每次回复之前,引擎会扫一遍最近的消息。出现了对得上的关键词,对应的设定这一回合就会发给 AI。没人提到,AI 就看不到它,也不花 token。

扫最近几条消息,由 触发词往回看几条 决定:点卡底下的 Context,展开 高级。默认是 2,这个游戏设成 4 更好。


第八步:测试 ​

点顶栏右边的 试玩。试玩会用你选的模型真的开一局,所以会消耗额度。玩几个回合,检查下面这几项。右边的 这回合 会写出每一回合背后发生了什么。

检查项怎么确认如果不对
开场白出现了进去就自动显示第一条消息检查 开场白 里有没有写字
自定义界面生效了消息有 CRT 风格的阶段标题和 HUD检查 面板 → 前端代码 里的 index.tsx 有 renderBubble 的代码,并且显示 正常
数值会变互动之后 HUD 的数字会更新;这回合里的「每个数」会写出某个值为什么变了、为什么没变检查每个变量的行为规则写清楚没有
关键词设定会触发提到「猫眼」后 AI 会按规则来;AI 收到了 里,它出现在「设定 · 这回合说到了」下面检查关键词拼写和触发词往回看几条

测完点 结束试玩,回到画布。


第九步:填卡的信息 ​

点画布右边的 封面与简介,会打开 卡的设置:

  1. 上传一张 封面图片(能传达恐怖氛围的图)。需要一张竖版的 手机 · 2:3 和一张横版的 电脑 · 16:9
  2. 写一段 描述,让玩家知道要玩的是什么
  3. 设 语言:选你的世界用的语言(比如 中文)
  4. 点顶栏的 保存

卡的信息


第十步:发布 ​

  1. 点顶栏右边的 未上线。它会先过一个简短的检查清单:有名字、有封面、有开场白、至少试玩过一次
  2. 点 发布上线。在对话框里加上 标签(恐怖、生存、悬疑、互动小说),设好 内容模式(有限制 或 无限制)、可见范围,以及是否允许别人做可编辑的副本
  3. 确认你对内容有权利,点 发布上线

你的世界会进入审核。通过以后,玩家就能在发现页找到它了 ヽ(✿゚▽゚)ノ


你学到了什么 ​

概念你做了什么
设定写了 GM 设定和开场白,这是 AI 表现的基础
变量建了生命、体力、天数、阶段和持枪状态,每次回复后精准追踪
行为规则用大白话告诉追踪小助手(或 AI)每个值什么时候变
界面让 AI 生成了一个 CRT 风格的界面,自己一行代码没写
关键词设定只在被提到时才发给 AI 的规则设定

还能做什么 ​

  • 行为:生命归零时自动触发死亡结局,不用指望 AI 记得
  • 自定义 UI 指南:把消息做成对话气泡、视觉小说场景或者战斗日志
  • 音频:加上 BGM 和音效,进地下室时自动换成诡异的音乐
  • 条件设定:按变量的值来发设定,比如后期的剧情揭示

去 yumina.io 搜 「No, I'm not a Human」,就能玩到完整版。