发布、导出与 Bundle
简短版
世界做好了,怎么让其他玩家看到?很简单:进入 Discover 页面点击发布。
在点「发布」之前,确保编辑器概览部分的这些内容已就绪:
- 名称和描述 — 名称最多 200 字符,描述最多 10000 字符。好名字是你的门面;好描述是你的导游。
- 封面图 — 玩家在社区列表中看到的第一样东西。没有封面的世界就像没有海报的电影院——没人知道里面在放什么。
- 标签 — 最多 10 个。标签帮助玩家发现你的世界:「fantasy」「romance」「battle royale」「multiplayer」等。
- 年龄分级 — 全年龄(all)、R18 或 R18G。选择 R18 或 R18G 会自动添加 NSFW 标记。
- 可见性 — 公开(所有人可见)或仅关注者可见。
准备好后,保存世界,进入 Discover 页面,点击顶部的发布按钮。在发布对话框中,选择你的世界,设置年龄分级和可见性,勾选条款协议并发布。你的世界将出现在 Discover 中,供其他人搜索、浏览、直接游玩或 fork 修改。
不想用平台的发布系统?把世界导出为 JSON 文件直接发给朋友。或者只导出世界的一部分内容——比如一个战斗系统——作为 Bundle 分享给其他创作者。
详细版
发布状态
世界有三种状态,像交通灯一样控制可见性:
| 状态 | 含义 | 对他人可见? |
|---|---|---|
draft | 仍在制作中,只有你能看到 | 否 |
published | 上线,出现在 Discover 页面 | 是 |
unpublished | 曾发布,但你下架了 | 否 |
草稿可以发布;已发布的世界可以下架;下架的世界可以重新发布或回到草稿。不能跳过步骤(例如草稿不能直接变成「已下架」)。
当你下架一个世界时,系统会自动通知所有将其添加到媒体库的玩家:「这个世界已被下架。」重新发布时,他们会收到另一条通知:「它回来了。」很贴心的功能。
发布设置
以下设置在 Discover 页面的发布对话框中配置——不在编辑器中。
年龄分级(ageRating)
三个级别:
| 分级 | 含义 |
|---|---|
all | 全年龄,任何人可见 |
r18 | 限制级,未成年人不宜 |
r18g | 重度限制(图形/极端内容) |
设置 r18 或 r18g 会自动使 isNsfw 为 true——不需要手动设置。反过来,如果你只设了 isNsfw: true 没指定分级,系统默认为 r18。如果什么都不设,发布默认为 all + 非 NSFW。系统处理一致性,你不会出现不匹配的分级。
可见性(visibility)
public — 公开,所有人都能在 Discover 看到
followers — 仅关注者可见,适合有限测试或分享给你的圈子发布时未指定则默认为 public。
允许编辑(allowEdit)
默认为 true。开启时,其他创作者可以 fork 你的世界进行修改。关闭意味着只有你可以 fork 自己的世界。
类似开源和闭源:allowEdit 开启时,你的世界可能催生有趣的变体;关闭则你的内容可以被游玩但不能被修改。你来决定。
允许多人游戏(allowMultiplayer)
默认为 false。此标记告诉平台该世界是否为多人游戏设计。如果你在世界定义 schema 中设置了 multiplayerSettings.availability 为 enabled,系统也会自动推断此值。具体多人行为配置见下方「多人游戏设置」。
标签(tags)
最多 10 个。对 Discover 页面的搜索和筛选非常有用——平台追踪所有已发布世界的标签使用频率,玩家可以按标签浏览和搜索。输入时自动补全会推荐热门标签。
封面图(thumbnailUrl)
在编辑器的概览部分上传。用于 Discover 卡片、搜索结果和我的媒体库。没有封面的世界几乎不会被点击。强烈建议添加。
Fork(派生)
当世界已发布且 allowEdit 为 true 时,其他用户可以「fork」它:
- 创建一份完整副本,归 fork 者所有
- 名称自动递增——原世界叫「Dark Forest」,你的副本叫「Dark Forest (1)」;再 fork 就是「Dark Forest (2)」
- 副本以草稿状态开始,不会自动发布
- 保留原世界的所有标签、描述、封面、schema 和内容
- 原世界的
downloadCount增加 1 - 副本的
sourceWorldId指回原世界以便追溯 - 引用的资产(如图片)也会一并复制
Bundle 系统
Bundle 是什么?打个比方:你花了两周打造了一个精良的战斗系统——变量、规则、UI 组件、音效,全套。朋友也在做世界,需要一个战斗系统。你不需要把整个世界给他——只要把战斗相关的部分打包发过去。
Bundle 是包含你世界部分内容的「组件包」。
Bundle 包含什么:
| 部分 | 包含的内容 | 必须? |
|---|---|---|
| 名称和描述 | Bundle 名称、描述、标签、创建日期 | 是 |
| 条目 | 角色档案、剧情、风格指令、设定 | 是(可以为空) |
| 变量 | HP、金币、好感度、标志、JSON 状态 | 是(可以为空) |
| 规则 | 触发条件和动作 | 是(可以为空) |
| 自定义 UI | TSX 组件 | 是(可以为空) |
| 音频曲目 | BGM、SFX、环境音 | 是(可以为空) |
| Root Component | 完整的多文件 TSX 应用(index.tsx 及其关联文件)。包含它会将 Bundle 升级为「完整模板」 | 可选 |
| 组织结构 | 自定义标签定义、条目文件夹结构 | 可选 |
Bundle 的两种用法
- 部分 Bundle — 只有 entries / variables / rules / audioTracks,没有
rootComponent。合并到现有世界中。适合分享一套战斗系统或一张角色卡。 - 完整模板 — 同上再加
rootComponent。Fork 为全新世界。适合做「视觉小说骨架」「卡牌对战框架」等——任何人导入它都从你的模板开始一个新世界。
七套官方资源模板就是这样运作的。
可以把它想成一个「模块」——插到另一个世界里就能用。
创建 Bundle
在编辑器顶部菜单点击 Export Bundle。你会看到四个可勾选的部分:
- 条目 — 条目(角色档案、剧情、风格指令等)
- 变量 — 变量(HP、金币、好感度等)
- 规则 — 规则(触发条件 + 动作)
- 自定义 UI — TSX 组件数组
一个贴心的功能:当你勾选一条规则时,系统会自动高亮它依赖的变量并标记为「推荐」,这样你不会意外遗漏。
两样东西自动包含(无复选框):
- 音频曲目(
audioTracks)——完整列表始终包含在 Bundle 中。 - Root Component(
rootComponent)——如果你的世界有的话,会自动附加。包含 Root Component 会将 Bundle 升级为「完整模板」——导入者不是合并到现有世界,而是可以 fork 为基于你模板的全新世界。
导入时的冲突处理
将 Bundle 导入现有世界时,内容是合并,而非覆盖。具体冲突解决方式:
- 相同变量 ID:跳过,使用已有变量
- 同名但不同 ID 的变量:创建带后缀的新变量(例如
HP (1)) - 条目:始终生成新 UUID,追加到现有条目列表
- 规则和组件:同上——创建新 ID 并追加
规则和组件中引用的变量 ID 会在导入后自动重映射以保持关系。这很重要——如果你导入一个战斗系统但规则中的「HP」变量没对上,这次导入就没用了。
发布 Bundle 到 Hub
保存的 Bundle 默认为私有。发布后,其他创作者可以在 Discover 页面搜索、预览和安装它。
你也可以将 Bundle 下载为 .bundle.json 文件发给朋友手动导入。
完整世界导出
除了 Bundle 的「部分导出」,你还可以导出完整的世界 JSON。在编辑器的概览部分或我的媒体库 → 我的项目中可用。导出文件包含 WorldDefinition 中的一切:
- 所有条目(
entries)和条目文件夹结构(entryFolders) - 所有变量(
variables) - 所有规则(
rules)和编译后的反应(reactions) - Root Component(
rootComponent)——完整的世界 UI 入口,包括index.tsx及其所有关联文件 - 自定义 UI TSX 组件(
customUI) - 音频曲目(
audioTracks)、BGM 播放列表(bgmPlaylist)、条件 BGM(conditionalBGM) - 空间系统(
systems)和场景(scenes) - 编辑器模式(
editorMode: "simple" | "advanced") - UI 蓝图(
uiBlueprint) - 世界设置(
settings)——温度、token 限制、布局模式、扫描深度等 - 多人游戏设置(
multiplayerSettings)
注意:语言变体分组键(languageGroupId)存储在世界记录本身(用于 Hub 匹配),不在 WorldDefinition 内部,所以不会出现在导出的 JSON 中。
完整导出的用途:
- 备份 — 定期导出为本地副本。你的数据在云端是安全的,但本地备份让人更安心。
- 版本控制 — 提交到 git 仓库追踪变更。在重大修改前导出作为手动存档点。
- 协作 — 将 JSON 发给协作者,他们可以在自己的账号导入并工作。
- 迁移 — 未来的 Tauri 离线版本使用相同格式,切换将是无缝的。
导入时,系统自动识别 Yumina 世界 JSON、SillyTavern 角色卡(包括 PNG 内嵌的 V2 卡片)和 Bundle JSON——各自处理方式不同。你不需要选择格式;直接拖放即可。
多语言支持:两套系统
Yumina 有两种多语言机制,目标完全不同——选择适合你的那个:
| 机制 | 翻译什么 | 何时使用 |
|---|---|---|
| Hub Translations | 只翻译 Discover / 你的主页上显示的「橱窗信息」——标题、描述、封面图、图库、标签 | 你的游戏内容是单语言的,但你想让全球玩家在浏览时看到本地化的标题和描述 |
| Variants | 整个世界的完整副本,全面翻译——条目、规则、组件文本,全部 | 你想让玩家用自己的语言游玩你的世界,AI 也用那种语言回复 |
Hub Translations
在编辑器左侧导航栏的 Hub Translations 中找到。
设置步骤:
- 进入 Hub Translations 部分
- 点击添加语言
- 从下拉菜单选择目标语言(支持 10 种语言)
- 当前世界的名称、描述、封面、图库和标签会作为起点复制过来
- 在 UI 中直接编辑每个字段——翻译成目标语言
- 如果需要可以上传特定语言的封面图
- 保存——翻译作为世界的一部分存储,不会生成单独的文件
玩家浏览 Discover 页面时,Yumina 自动选择最匹配其 UI 语言的翻译。玩家在游戏中看到的内容保持世界的原始语言——Hub Translations 不影响游戏文本。
Variants
如果你想翻译游戏内容本身,需要 Variant 系统——在编辑器顶部的 Variant 标签栏中创建新变体,选择目标语言。完整流程参见初学者指南 → 多语言版本(Variants)。
引擎将变体识别为「同一世界的不同语言版本」。在世界详情页,玩家一键切换。在社区列表中变体组算一个世界;浏览统计合并计算。
支持的语言
两种机制支持相同的 10 种语言:
| 代码 | 语言 |
|---|---|
en | English |
zh | 中文 |
ja | 日本語 |
ko | 한국어 |
es | Español |
fr | Français |
de | Deutsch |
pt | Português |
ru | Русский |
ar | العربية |
选哪个?
- 只想为海外玩家提供不错的封面和描述 → Hub Translations
- 想要完全本地化的游戏体验 → Variants
- 两者可以结合使用:变体 A(中文版)配中文 + 英文 Hub Translations,变体 B(英文版)配英文 + 日文 Hub Translations——总共覆盖三组受众
多人游戏设置(MultiplayerSettings)
如果你的世界支持多人游戏,在编辑器中配置以下设置。这些是可选的——不设置的话多人游戏默认禁用。
| 设置 | 选项 | 默认值 | 用途 |
|---|---|---|---|
| Availability | Disabled / Enabled | Disabled | 多人游戏主开关 |
| Chat policy | Free / Active speaker only | Free | 谁可以发消息以及何时 |
| AI trigger mode | Instant / Timer / Round / Manual | Manual | AI 何时回复 |
| Round timer | 5-120 秒 | 15 | 倒计时时长(timer 模式) |
| Author notes | 自由文本 | 空 | 房主可见的说明 |
逐项解释:
availability — 主开关。disabled = 仅单人。enabled = 可以创建多人房间。也记得在世界数据库层设置 allowMultiplayer 为 true——编辑器中有一个单独的开关。
defaultChatPolicy — 聊天策略。
free:自由模式,所有人随时可以发消息,像群聊。适合休闲、社交世界。active_speaker_only:回合制,一次只有一人可以说话,像桌游。适合 TRPG 桌面会话。
defaultAiTriggerMode — AI 何时回复?四种模式对应不同节奏:
instant:有人说话 AI 立即回复。最快节奏,适合对话驱动的世界。timer:倒计时结束后 AI 回复(使用defaultRoundTimerSeconds)。给其他人留出插话的时间窗口。round:所有人都发过消息后 AI 才回复。像 TRPG 中 DM 等所有人行动完才说话——每个人的行动都被考虑到。manual:房主手动触发 AI。最灵活,房主完全控制节奏。
defaultRoundTimerSeconds — 计时器时长,5-120 秒,默认 15。主要在 timer 模式下生效。
authorNotes — 创建房间的人可见的笔记。例如「推荐 2-4 人」「房主请在开始前阅读规则」「每位玩家在开始前选择一个职业」。这些不会发送给 AI——纯粹是给人看的说明。
这些都是默认值——房主可以在实际会话中调整。你设置的是「推荐配置」。
实战示例
示例 1:发布前检查清单
世界做好了准备上线。别急着点——先过一遍这个清单:
[ ] 名称 — 有吸引力吗?一眼就能看出是什么类型的世界吗?
[ ] 描述 — 写了吗?别留空。至少两句话告诉玩家他们会体验到什么。
[ ] 封面图 — 上传了吗?缩略到 Discover 卡片大小时还清晰吗?
[ ] 标签 — 加了 3-10 个相关标签吗?想想玩家会搜什么。
[ ] 年龄分级 — R18 内容选 r18,极端内容选 r18g,否则选 all。别搞错。
[ ] 可见性 — 想让所有人看到就 public。想先限范围测试就 followers-only。
[ ] allowEdit — 想让别人 fork 修改就开启。想保护原创就关闭。
[ ] 问候语 — 玩家看到的第一条消息是什么?设置好了吗?第一印象很重要。
[ ] 自测 — 自己从头到尾玩过了吗?变量正常吗?规则正确触发了吗?确认无误后,在编辑器中点击保存,进入 Discover 页面,点击发布按钮,在对话框中选择你的世界,完成发布流程。
你的世界上线了。去 Discover 看看效果吧。
示例 2:创建战斗系统 Bundle 分享给社区
假设你在 RPG 世界中构建了一个回合制战斗系统,包含:
- 变量:
HP(number,0-100,stat)、MP(number,0-50,resource)、ATK、DEF、battlePhase(string,flag) - 规则:
HP 归零时触发死亡结算、每回合开始时 MP 自然恢复 5 - 组件:一个 HP 状态栏,一个 MP 状态栏
- 音频:战斗 BGM(loop)、打击音效(sfx)
打包步骤:
- 在编辑器顶部菜单点击 Export Bundle
- 命名为「Turn-Based Combat System v1.0」,写清楚使用说明
- 勾选 5 个变量——勾选规则时系统会高亮相关变量
- 勾选 2 条规则和 2 个组件
- 勾选音频曲目
- 添加标签:
combat、rpg、turn-based - 导出保存
导出的 Bundle 文件包含所有选中内容——条目、变量、规则、UI 组件和音频曲目——打包为单个 JSON 文件。
别人拿到 Bundle 文件后,在编辑器顶部菜单点击 Import Bundle,选择安装到哪个世界,战斗系统就就绪了。变量名冲突自动处理。
示例 3:多人游戏设置——4 人合作 RPG
你构建了一个 4 人地牢冒险世界。每人扮演一个职业(战士、法师、盗贼、治疗者),轮流行动,所有人行动完后 AI 作为 DM 推进故事。
在编辑器中设置:
- Availability:Enabled
- Chat policy:Active speaker only
- AI trigger mode:Round
- Round timer:60 秒
- Author notes:「推荐 4 人,每人选择一个职业:战士、法师、盗贼或治疗者。每轮,每位玩家描述自己的行动,所有人行动完后 AI 推进故事。60 秒计时器——如果有人闲置太久,AI 照样继续。」
为什么选这些设置?
active_speaker_only— 回合制发言防止四个人同时打字让 AI 不知道该回复谁。这是 TRPG 会话,所以应该轮流来。round— AI 等所有人发言后再回复,确保每位玩家的行动都被考虑到。不会因为「DM 已经往下走了」就有人被跳过。60 秒计时器— 足够思考策略,又不会太长拖节奏。如果有人去拿饮料了,AI 在 60 秒后仍会继续,不会把其他人锁在原地。authorNotes— 给房主的「说明书」,让他们知道如何运行会话以及该告诉玩家什么。
另外别忘了在世界层面设 allowMultiplayer 为 true——否则即使 multiplayerSettings 配置完美,平台也不会将其显示为多人世界。
