Roblox × Story OS
用你的故事,做出 Roblox 剧情游戏。
BunCho 的 Story OS 会把故事导出成含 NPC 对话、任务、分支与结局的 Roblox 项目。世界在 Roblox Studio 里搭建,故事骨架与对话由 BunCho 提供。我们专注于长篇结构、角色一致性与分支的完整性。
从一句话到发布
- 在 Story OS 的「新系列」输入一句话,AI 会写出剧情、角色与场景(会消耗点数)。也可以从现成的模板开始。
- 在「游戏」标签页加上选项与标记(拿到钥匙、解开暗号…)。死路、无法到达的场景、没人会设置的标记会立刻标出。
- 通过 Story Tests 后即可「导出到 Roblox」:zip 内含 Rojo 项目、.rbxmx 模型和插件用的 .json。
- 在 Roblox Studio 用 BunCho 插件(或 Rojo)导入,NPC、任务与对话界面就会摆好。
- 搭建世界、多人测试,然后发布到 Roblox。
会生成什么
以下是对应这句话的模板《逃出废弃校舍》实际导出的结果(未经修改)。
故事结构(分支与结局)
15 个场景、5 个结局。箭头是向前的选项(回到教室等 10 条回头路未画出)。
三人一起 / 逃脱成功 / 恶作剧的真相 / 后门的暗语 / 等待天亮
3 名 NPC(性格・口吻・秘密・行为)
小春
班长
- 性格
- 爱发号施令又逞强,责任感却比谁都强。
- 口吻
- 语气干脆,像在下命令。
- 目的
- 把大家都带回家
- 秘密
- 以为是自己写的恶作剧纸条害大家被关住。
- 台词示例
- “冷静。五分钟内找到出口。”
美绪
图书股长
- 性格
- 安静、观察力敏锐,不擅长依赖别人。
- 口吻
- 小声、简短而精准。
- 目的
- 解开暗号
- 秘密
- 去年也差点被关在这里,黑板上的暗号就是她留下的。
- 台词示例
- “黑板上有数字暗号。”
小空
田径队员
- 性格
- 开朗健谈,怕黑。
- 口吻
- 活泼随性的口吻。
- 目的
- 天黑前回家
- 秘密
- 忘了工友给的纸条一直放在口袋里。
- 台词示例
- “我想在天黑前回家……”
行为:NPC 会移动到自己有台词的场景地点;在其他地方被搭话时,会用最近的一句台词回应。秘密是给开发者的备注,不会显示给玩家。
任务(找钥匙・解暗号・开门)
选项所依赖的标记会直接变成目标清单。时间限制 300 秒,时间到就进入「等待天亮」结局。
- 调查 913 号书架
- 用暗号的号码打开置物柜
- 收下纸条
- 相信美绪
- 用钥匙打开正门
- 在后门说出暗语
游戏内界面
- 对话窗口:说话者名字、一次一行、下一步
- 选项:多人时投票(多数决、有时间限制)
- 目标显示:打勾清单与下一个地点
- 计时器:剩 30 秒变红
- 结局:已发现的结局数(共 5 个)
我想黑板上的数字是图书分类号。
调查 913 号书架调查 400 号书架回到教室界面用代码搭建,不需要图片素材。可在 StoryClient 开头的 THEME 表调整颜色与字体。
Luau 代码
数据(Story、Strings)与运行部分(状态机、服务器、界面)分开。每个选择都由服务器确认(服务器权威)。
-- src/shared/Story.luau
["n006"] = {
Title = "N.n006.title",
Place = "science",
Ending = false,
Events = { "lights_flicker" },
Lines = {
{ Key = "N.n006.1" },
{ Key = "N.n006.2", Npc = "haru" },
},
Choices = {
{ Id = "c013", Key = "C.c013", To = "n007", Requires = { "cipher" }, Sets = { "has_key" } },
{ Id = "c014", Key = "C.c014", To = "n002", Requires = {}, Sets = {} },
},
-- src/shared/StoryRuntime.luau
-- Applies a choice. Returns false (and a reason) when the choice is not open right now.
function StoryRuntime.choose(story, state, choiceId: string): (boolean, string?)
local c = StoryRuntime.findChoice(story, state, choiceId)
if c == nil then
return false, "choice_not_available"
end
for _, f in c.Sets do
local neg, name = negated(f)
state.flags[name] = if neg then nil else true
end
StoryRuntime.jump(story, state, c.To)
return true, nil
end
-- Quest objectives with their done state (flags that some choice requires)
function StoryRuntime.objectives(story, state)
-- src/server/StoryServer.server.luau
local function onChoose(player: Player, choiceId: string)
local session = sessions[sessionKey(player)]
if session == nil or not session.open or session.state.ended then
return
end
if Runtime.findChoice(Story, session.state, choiceId) == nil then
return
end
local voters = #members(session)
if Config.ChoiceMode ~= "vote" or voters <= 1 then
存档
DataStore 可选(Config.UseDataStore)。会保存已发现的结局与单人进度。在 Studio 测试时,请开启「Studio 访问 API 服务」。
6 种语言的翻译表
日文、英文、西班牙文、葡萄牙文、繁体中文、简体中文。按玩家的 Roblox 语言显示,缺少的语言用原文。localization/BunChoStory.csv 也能配合 Roblox 的翻译工具使用。
zip 的内容
- BunChoStory.rbxmx
- NPCS.md
- README.md
- default.project.json
- localization/BunChoStory.csv
- src/client/StoryClient.client.luau
- src/server/StageSetup.server.luau
- src/server/StoryServer.server.luau
- src/shared/Config.luau
- src/shared/Localize.luau
- src/shared/StageBuilder.luau
- src/shared/Story.luau
- src/shared/StoryRuntime.luau
- src/shared/Strings.luau
- story-tests.json
- story.pack.json
用 Studio 插件摆放
- 安装插件(即将上架 Creator Store;目前可把下方文件放进 Studio 的 Plugins 文件夹)
- 打开 Plugins → BunCho → Story Pack,选择导出的 .json,或粘贴 https 链接
- 「Build stage now」会用零件摆出房间、发光的故事点与 NPC(都能编辑)
- 按「Play」确认。多人测试请用「测试 → 客户端与服务器」
使用 Rojo 的话,解压后运行 rojo serve,再从 Studio 连接。也可以把 .rbxmx 拖进去(步骤见 README)。
发布
可以发布到 Roblox 并尝试创收(收益取决于 Roblox 的条款与 DevEx 的条件)。
为什么用 BunCho 做
- 角色性格不走样角色的性格、口吻、自称与秘密都记在正典(Character Bible),Story Tests 会找出口吻的偏差。NPC 台词就是从这份正典导出。
- 伏笔一定回收埋下的伏笔与回收的场景会连在一起管理;到结局还没回收的伏笔,测试会告诉你。
- 保证选项与结局的完整性有死路、无法到达的场景、没人设置的标记或没有去处的选项时就无法导出。交出文件前,会用程序确认每个结局都能到达。
考虑年龄分级的设计
- 游戏中不会运行生成式 AI。所有文字在导出时就已确定并检查过(不放入自由输入的 AI 聊天)。
- 恐怖演出只有灯光闪烁、断电、影子、耳语字幕与轻微晃动。没有血腥、受伤或大声惊吓(Config.ScareIntensity = 0 可关闭)。
- 请按你的游戏如实填写 Roblox 的成熟度与合规问卷。
在 Roblox Studio 还要自己做的事
- 搭建世界(舞台只是方块;用自己的地图时,给零件加上标签 BunChoStoryTrigger 与属性 Place 或 Npc)
- 有使用权的音效、模型与动画
- 多人测试、缩略图、说明、问卷与发布
模板
逃出废弃校舍
三名学生被困在废弃校舍,必须在 5 分钟内逃出。找钥匙、解暗号、打开门。共有 5 种结局。
限时 5 分钟・3 名 NPC・钥匙/暗号/门・5 个结局
熄灯的洋馆
暴风雨之夜,一群朋友被困在古老的洋馆。找出银钥匙与金钥匙,揭开住在馆中的幽灵少女的秘密。共有 5 种结局。
合作・银钥匙与金钥匙・恐怖演出(全年龄)・5 个结局
费用
导出到 Roblox 已包含在 BunCho 的方案中。Studio 插件与模板免费。
FAQ
需要会用 Roblox Studio 吗?
导入并按下 Play 之前都不需要。搭建世界与发布要在 Roblox Studio 进行。
游戏里会有 AI 跟玩家聊天吗?
不会。所有对话都是导出时就写好的文字,因此容易做成适合全年龄的游戏。
可以用来做 Roblox 恐怖游戏吗?
可以。合作恐怖模板有合力找钥匙、5 个结局与适合全年龄的恐怖演出。
能放进自己的地图吗?
设置 Config.BuildStage = false,并给零件加上标签 BunChoStoryTrigger 与属性 Place(地点 id)或 Npc(角色 id),那里就会成为故事的入口。
一定要用 Rojo 吗?
不用。也可以用 BunCho 插件导入,或拖入 .rbxmx。
文中功能均为 BunCho 目前可用的功能。Roblox Studio 的操作录屏准备中。 日本語