Skip to content

手把手教程:从零做一个生存恐怖世界

我们要做一个类似 "No, I'm not a Human" 的恐怖生存游戏。玩法很简单:末日降临,外面有伪装成人类的"访客"。你独自在家,每晚都有人来敲门。透过猫眼判断来者是人是怪,做出选择,活过14天。

做完这篇教程,你就掌握了 Yumina 最核心的创作技能——词条、变量、指令、组件、世界书。不管以后做什么类型的世界,都从这里起步 (•̀ᴗ•́)و


第一步:创建新世界

点击左侧导航栏的 创建(Create) 按钮,选 空白项目(Blank Project)。进入编辑器后,在左上角输入框填好世界名称:

  • 名称伪人

如果你还不熟悉编辑器的各个区域,可以先去 新手指南 逛一圈再回来。


第二步:写角色设定词条

点左侧导航栏的 词条(Lorebook)

你会看到左边有几个分组,其中 PRESETS(预设区)里已经有一些 Yumina 官方的预设词条(Fiction Mode、Task、Instructions 等)。这些是帮你规范 AI 行为的默认指令,你现在可以先不管它们,等更熟悉之后再按需修改或删除。

我们来创建自己的词条。确保你在 PRESETS 分组下,点右上角的 添加词条(+ Add Entry)

在这个游戏里,AI 不是某个角色,而是游戏主持人(GM)——负责描述场景、扮演所有 NPC、推动剧情。所以第一个词条就是告诉 AI 它的身份和职责。

创建角色设定词条

字段
名称(Name)游戏主持人设定
发送身份(Send as)Instruction(指令——AI 会把这当成规则来遵守)
标签(Tags)Preset

内容(Content) 里写:

你是一个公正的恐怖生存游戏GM。游戏持续14天(14个夜晚)。

设定:末日降临,城市中出现了外表酷似人类的”访客”。玩家独自在家,每晚会有人来敲门求助。玩家需要通过门上的猫眼观察、对话盘问等方式判断来者的真实身份,决定是否开门。

你的职责:
- 每个夜晚描述敲门者的外貌、言行
- 公平地给出线索,不直接揭露身份
- 白天让玩家自由探索房间、使用物品、打电话
- 保持悬疑紧张的氛围
- 在每次回复末尾给出3-5个建议选项(A/B/C/D/E格式)

每次回复以阶段标题开头,格式:
- 夜晚:**第X夜**
- 白天:**第X天**

几个关键点:

  • 词条在 PRESETS 分组下 → 它会始终发送给 AI,每次对话都能看到。核心设定必须放这里
  • Send as = Instruction → AI 会把这当成系统指令来遵守,不是角色对话
  • Tag = Preset → 方便分类管理

这个词条就是你游戏的”宪法”——定义了 AI 的一切行为准则。


第三步:写开场白

切换到 开场白(First Message) 区域,点 添加开场白(Add Greeting)。(或者在 Lorebook 里新建一个 role: greeting 的词条,效果一样。)

编辑开场白

**第1夜**

电视里的雪花噪点闪烁不停。应急广播用机械般的声音重复着同一段警告:"……目前已确认的访客特征:牙齿过于整齐划一,呈瓷白色。请居民注意甄别,切勿轻易开门……"

你独自待在家里。房子不大,有浴室、客厅、卧室、书房、厨房和储物间。门上有一个猫眼,储物间里有一把手枪,书房有一部座机电话。冰箱里还有几天的食物。

窗外的街道空无一人。或者说——看上去空无一人。

然后,敲门声响了。

***咚……咚……咚。***

门外传来一个年轻女人的声音,带着哭腔:"求求你……让我进去吧……外面有东西在追我……"

**建议选项:**
A. 打开门让她进来
B. 隔着门和她说话,问几个问题
C. 拒绝,让她离开
D. 通过猫眼仔细观察她
E. 其他(输入你想做的任何事)

开场白的要点:

  1. 让玩家立刻知道自己在什么处境
  2. 交代可用的资源和环境
  3. 用一个需要决策的场景结尾,逼玩家马上行动

第四步:创建游戏变量

切换到 变量(Variables) 区域,点 添加变量(Add Variable),创建 5 个变量。

创建变量

1. 生命值

字段
IDplayer_hp
显示名称(Display Name)Player HP
类型(Type)Number
默认值(Default Value)3
最小值(Min)0
最大值(Max)5
分类(Category)Stat
行为规则(Behavior Rules)被访客攻击或做出致命错误时 -1。让 Pale Stranger 进门或承认自己独自一人时直接归零(即死)。降到 0 游戏结束。

2. 体力

字段
IDenergy_current
显示名称(Display Name)Energy
类型(Type)Number
默认值(Default Value)3
最小值(Min)0
最大值(Max)8
分类(Category)Resource
行为规则(Behavior Rules)检查访客(body check)和射击消耗 1 点。猫眼观察和对话免费。白天恢复到上限。体力为 0 时无法执行消耗体力的行动。

3. 天数

字段
IDgame_day
显示名称(Display Name)Game Day
类型(Type)Number
默认值(Default Value)1
最小值(Min)1
最大值(Max)14
分类(Category)Stat
行为规则(Behavior Rules)每完成一个完整的夜晚-白天周期后 +1。到第 14 天结束时游戏结算。

4. 阶段

字段
IDgame_phase
显示名称(Display Name)Game Phase
类型(Type)String
默认值(Default Value)Night
分类(Category)Flag
行为规则(Behavior Rules)值为 "Night" 或 "Day"。夜晚处理敲门事件,白天自由探索房间、使用物品。

5. 是否武装

字段
IDplayer_has_gun
显示名称(Display Name)Has Gun
类型(Type)Boolean
默认值(Default Value)True
分类(Category)Flag
行为规则(Behavior Rules)玩家默认有手枪。射击访客消耗 1 点体力,但可能误杀人类。射击后需要描述后果。

行为规则是什么

行为规则(behaviorRules) 不是代码,是写给 AI 看的自然语言提示。AI 生成回复时会读到这些,知道什么时候该改什么变量。相当于给 AI 的"小抄" φ(>ω<*)


第五步:变量是怎么变化的

你可能在想——变量创建好了,AI 怎么知道什么时候该改它们?

好消息:你不需要手动教 AI。 只要你的世界里有变量,Yumina 引擎会自动做两件事:

  1. 自动告诉 AI 指令格式:引擎会在每次对话时悄悄塞一段说明给 AI,教它用 [变量ID: 操作 值] 的格式来更新状态。你完全不用操心这个。
  2. 自动把你写的行为规则发给 AI:上一步你在每个变量里填的"行为规则",AI 每次都能看到。它会根据这些规则自己判断什么时候该改什么变量。

举个例子:你在 health 变量的行为规则里写了"被访客攻击或做出危险行为时扣减"。当游戏中玩家被攻击了,AI 自己就会在回复末尾写出 [health: -20],引擎检测到后自动把生命值从 100 减到 80。

所以行为规则写得越清楚,AI 表现越好。 回去看看你第四步写的行为规则,确保每个变量都说清楚了"什么情况下会变化、怎么变化"。

AI 输出的指令长什么样

AI 回复的末尾会出现类似这样的内容:

[health: -20]
[energy: -15]

这些就是指令。引擎会自动提取并执行,玩家看到的回复里不会显示这些方括号内容。

更多指令语法

除了 +(加)和 -(减),还支持 set(设为指定值)、toggle(开关取反)等操作。详见 → AI 指令与宏


第六步:让世界好看一点——用 AI 生成界面

到这一步,你的世界已经能玩了。但玩家只能看到纯文字——没有氛围,没有沉浸感。我们来做一个真正有恐怖游戏感觉的界面。

"写代码?" 不不不,让 AI 帮你写就行 ( ̄▽ ̄)ノ

方法一:用 Yumina 内置的 Studio AI(推荐)

  1. 点编辑器顶部的 进入 Studio(Enter Studio)
  2. 打开 AI Assistant 面板
  3. 把下面这段发给它(你可以直接复制):
帮我做一个末日恐怖生存游戏风格的消息渲染器。参考游戏 "No, I'm not a Human" 的风格。

我需要这些效果:

1. 相位标题:
   - 如果 AI 回复里有 "🌑 **NIGHT X**",提取出来做成一个 CRT 显示器风格的标题栏(深绿色发光文字、扫描线效果、轻微闪烁)
   - 如果有 "☀️ **DAY X**",做成暖色调的标题栏(琥珀色文字)
   - 标题从消息正文里去掉,单独展示

2. 敲门效果:
   - 如果回复里有 ***加粗斜体的文字***(三个星号包裹),把它们提取出来做成敲门动画——大号红色文字,有抖动效果

3. 底部 HUD 状态栏:
   - 用等宽字体,暗绿色背景
   - 显示:⚡ 体力(energy_current 变量)、❤️ HP(player_hp 变量)、🔫/🚫 武装状态(player_has_gun 变量)
   - 紧凑的一行显示

4. 叙事文本区域:
   - 暗色背景(深绿黑色),有微弱的边框发光
   - 浅绿色文字,行间距大一点,有阅读感
   - 用 renderMarkdown 渲染

5. 选择按钮:
   - 如果 AI 回复里有 "Suggested Choices:" 或 "**你的选择:**",把选项(A. B. C. D. E.)提取出来做成可点击的按钮
   - 点击后自动发送对应选项
   - 暗绿色调,hover 变亮

6. 整体氛围:黑绿色 CRT 监控器风格,低饱和度,压抑的末日感

我的变量:
- player_hp — 生命值,数字,0-5
- energy_current — 体力,数字,0-8
- game_day — 第几天,数字,1-14
- game_phase — "Night" 或 "Day"
- player_has_gun — 是否有枪,是/否
  1. AI 会生成代码并弹出审核卡片,Canvas 面板可以实时看到效果
  2. 满意就点 批准(Approve),不满意就继续说"敲门效果再夸张一点"或"选择按钮间距太大了"

Studio AI 生成界面

生成的效果预览

你看,这样一个酷炫的前端就怎么简单的搭建好了!!!

方法二:用外部 AI(Claude、ChatGPT 等)

如果你更习惯用其他 AI,也完全可以。把上面的效果描述发给它,末尾加上 Yumina 的技术信息:

Yumina 技术信息(写代码时请遵守):
- 代码格式 TSX,用 export default function Renderer({ content, renderMarkdown }) { ... } 导出
- useYumina() 可以拿到变量,比如 useYumina().variables.player_hp
- useYumina().sendMessage(text) 可以以玩家身份发送消息(做可点击选项用)
- 内置 Icons 图标库(不用 import),比如 Icons.Heart, Icons.Zap
- renderMarkdown(content) 把文字变成带格式的 HTML
- 支持 Tailwind CSS 和 React hooks
- 注入动画用 useEffect + document.createElement("style")
- 用 var 不用 const/let 做顶层声明

AI 给你代码后:

  1. 回到编辑器 → 消息渲染器(Message Renderer) 区域 → 选 自定义 TSX(Custom TSX)
  2. 把代码粘贴进去
  3. 底部显示 编译状态:OK(Compile Status: OK) 就说明成功了

代码不用看懂

你不需要理解这些代码在干什么。只要粘贴进去后底部显示 编译状态:OK(Compile Status: OK) 就说明没问题。如果报错了,把错误信息原封不动发回给 AI 让它修就行 ∠( ᐛ 」∠)_

不满意怎么办

效果不是你想要的?直接跟 AI 说"血条太细了加粗一点"、"背景换成纯黑"、"加个闪烁效果"之类的,让它修改再重新粘贴。来回几轮就能调到你满意为止。


第七步:写世界书词条

前面的词条放在 PRESETS 分组,始终发送。但有些信息只在相关话题出现时才需要——这就是 CHAT HISTORY 分组的用途。

回到 词条(Lorebook),展开左侧的 CHAT HISTORY 分组,在这个分组下点 添加词条(+ Add Entry) 创建几个关键词触发的词条:

1. 敲门事件规则

字段
名称(Name)敲门事件
发送身份(Send as)Instruction
关键词(Keywords), 敲门, 开门, knock
敲门事件处理规则:
- 每个夜晚有2-3个敲门者,依次出现
- 玩家可以:通过猫眼观察(免费)、隔门对话(免费)、要求身体检查(消耗体力)、开门或拒绝
- 让人类进来 = 有的能帮忙 | 让访客进来 = 危险
- 描述敲门场景时保持悬疑,不直接揭露身份

2. 猫眼观察

字段
名称(Name)猫眼观察
发送身份(Send as)Instruction
关键词(Keywords)猫眼, 窥视, 观察, 看看
猫眼观察规则:
- 只能看到门外来者的头部和上半身
- 重点描述:面部表情、牙齿、眼睛、皮肤质感
- 访客的伪装有细微破绽(牙齿过于整齐、瞳孔不正常、皮肤纹理异样)
- 人类有正常的不完美特征(龋齿、黑眼圈、伤疤)
- 不要直接揭露身份,只描述画面

3. 房间搜索

字段
名称(Name)搜索房间
发送身份(Send as)Instruction
关键词(Keywords)搜索, 检查, 翻找, 探索, 房间
房间搜索规则(仅白天可用):
- 储物间:可以找到手枪
- 厨房:食物补给,可以恢复少量体力
- 书房:电话,可以拨打获取情报
- 描述环境细节,营造不安氛围

关键词触发的原理

引擎每次生成回复前,会扫描最近几条消息。出现匹配关键词 → 对应词条临时发给 AI。没人提到 → AI 看不到,不浪费阅读量。又省空间又精准 (≧▽≦)

扫描深度在 词条(Lorebook) 区域的 Entry Settings 里的 Scan Depth 设置,默认 2,建议改到 4。


第八步:测试

核心内容都搞定了,测试一下!

先点编辑器顶部的 保存(Save),然后点左侧导航栏底部的金色 PLAY 按钮。在弹出的会话界面点 新建会话(New Session),检查以下几项:

检查项怎么验证没生效的话
开场白显示进入后自动出现第一条消息检查 First Message 区域是否写了开场白
渲染器生效消息有 CRT 风格的相位标题和 HUD检查 Message Renderer 是否选了 Custom TSX 且编译 OK
指令生效互动后变量会跟着变(HUD 数值变化)检查变量的行为规则是否写清楚了
世界书触发提到"猫眼"后 AI 按规则描述检查关键词拼写、Scan Depth 设置

第九步:完善概览信息

测试没问题了,切到 概览(Overview) 区域,把发布前的信息填好:

  1. 上传一张 封面图(Cover Image)(能体现恐怖氛围的)
  2. 写一段 描述(Description),让玩家知道这是什么游戏
  3. 标签(Tags)恐怖, 生存, 解谜, 互动小说
  4. 设置 语言(Language):选择你的世界是什么语言写的(比如 中文
  5. 点编辑器顶部的 保存(Save)

概览信息


第十步:发布

  1. 回到左侧导航栏的 发现(Discover) 页面
  2. 点顶部的 发布(Publish) 按钮
  3. 在弹出的发布弹窗中选择你的世界
  4. 设置年龄分级、可见性、是否允许别人编辑
  5. 勾选同意条款,点发布

完事了!你的世界上线了 ヽ(✿゚▽゚)ノ


你学到了什么

概念你做了什么
词条写了系统设定和开场白——AI 行为的基础
变量创建了 HP、体力、天数——游戏状态的骨架
指令引擎自动教 AI 用指令更新状态,你只需要写好行为规则
自定义界面用 AI 生成了状态面板——不用自己写代码
世界书关键词触发的规则词条——按需加载的知识库

这五样东西配合起来,就是一个完整的互动世界。

还能做什么

这篇教程只用了最基础的功能。Yumina 还有很多好玩的:

  • 行为规则引擎 — HP 降到 0 自动触发死亡结局,不用等 AI 自觉
  • 自定义渲染器 — 把消息变成气泡对话、视觉小说、战斗日志
  • 音频系统 — 加 BGM 和音效,进地下室自动切阴间音乐
  • 条件词条 — 根据变量值激活词条,比如后期才出现的剧情

进阶教程(以"壺中の毒 · 大逃杀"为蓝本)即将推出,会深入讲行为引擎、自定义渲染器和复杂状态管理。


去玩真实版

这篇教程做的是简化版——5 个变量、几条词条、一个渲染器。但 Yumina 上的真实 "No, I'm not a Human" 完整卡有:

  • 20+ 个角色:8 个人类(收银员 Sarah、退休工程师 Marcus、护士 Elena……)、6 个伪装成人类的访客(送货员 Jake、小女孩 Lily……)、还有特殊角色(Pale Stranger、神秘的 Who、猫婆婆)
  • 25+ 个变量:不只是血量和体力——还有房间状态、客人记录、FEMA 通报次数、各种库存(咖啡、能量饮料、猫粮……)
  • 完整的猫眼系统:透过猫眼看到每个角色的立绘,人类有正常瑕疵,访客有细微破绽
  • CRT 监控器风格渲染器:夜晚/白天相位动画、敲门抖动效果、可点击选择按钮、底部 HUD

yumina.io 搜索 "No, I'm not a Human" 体验完整版,感受一下你的世界能做到什么程度。然后回来继续打磨你自己的作品 ᕕ( ᐛ )ᕗ