For the complete documentation index, see llms.txt. This page is also available as Markdown.

Roblox

如果你在 Roblox 上制作过游戏,要开始使用 All Out,你需要了解一些关键差异!

如果你来自 Roblox Studio + Lua,这一页会帮助你把你的思维模型迁移到 All Out + CSL(All Out 的脚本语言)。

主要差异(概览)

  • 实体 + 组件(不是 Instances + Services):世界由……中的实体构成 层级,而行为则来自添加组件(内置或脚本编写的)。

  • 多人游戏是“内建的”:CSL 的设计使得大多数玩法代码可以像单机一样编写,而引擎会同步相关状态。

  • 编辑器工作流更接近“场景编辑”,并在……中调整它们的组件 检查器,并通过……重用组 预制体.

  • CSL 是静态类型的:它会让你感觉更接近 Go/Odin,而不是 Lua。(参见 CSL 入门.)

  • 玩法变换是 2D 的:位置和缩放使用 v2,旋转是一个以度为单位的角度,精灵层控制绘制顺序。


Roblox → All Out 速查表

Roblox 概念
All Out / CSL 概念
备注

Roblox Studio

All Out Editor

你可以从 Creator Portal 启动它(参见 启动编辑器).

Place / 体验

All Out 游戏项目

你的本地项目文件夹包含一个 scripts 目录,用于 .csl 文件。

资源管理器 / 工作区

层级

层级会显示当前世界/场景中的所有实体。

Instance / Model / Part

实体

“文件夹式”组织是通过给实体设置父子关系来完成的(参见 层级).

属性窗口

检查器

你可以在这里编辑实体/组件字段并添加组件。

属性

已序列化的组件字段

通过以下方式在编辑器中公开字段: @ao_serialize (示例见下文)。

CFrame / Vector3

2D 实体变换

位置和缩放是 v2;旋转是一个以度为单位的角度。

Clone()

Scene.instantiate

加载一个 Prefab_Asset,然后将其实例化到场景中。

模型复用

预制体

关联实例会保留根属性,但组件字段不是彼此独立的覆盖值(参见 预制体).

ProximityPrompt / ClickDetector

可交互组件

添加 Interactable派生组件,并实现 can_use/on_interact (参见 可交互对象).

Touched / Region3 / GetPartsInPart

触发器 / 范围查询

使用触发回调来处理进入/退出行为,并 Scene.get_all_components_in_range 用于广域感知(参见 导航网格与碰撞).

Tools / abilities / mobile buttons

技能

内置的移动端/PC 友好按钮 UI + 冷却模式(参见 技能).

DataStoreService

存档 + JSON + 经济系统

参见 保存系统JSON 序列化.

ScreenGui / GuiObjects

All Out UI 系统

参见 UI 基础.


你的第一个小时(推荐路径)

  1. 按顺序完成 构建一个基础游戏.

  2. 中的“苹果收集”教程 CSL 入门 中的 CSL 基础概览 (尤其是, ao_update,以及创建组件)。

  3. 通过 检查器.


学习如何将你的新组件附加到世界对象上

脚本思维模型(Lua → CSL) Script/LocalScript 来查找对象(Workspace.Foo.Bar)并连接事件。在 All Out 中,你通常会:

  • 编写 组件类 (行为)。

  • 在编辑器中将它们附加到实体上(或者在运行时生成实体并添加组件)。

  • 使用 @ao_serialize 把可调节的值存储在组件上(这样你就可以在检查器中按实体调整)。

下面是一个小示例,感觉就像“挂在对象下的 Script”,但以 CSL 组件的形式表达:

在……中注册 Coins 货币,并在存入之前在场景设置期间注册它。诸如 (尤其是ao_update 会在每个场景模拟中运行;它们并不是仅限服务器。参见 游戏/帧生命周期.


你会认识的交互方式(以及它们如何对应)

ProximityPrompt → Interactable

如果你使用过 ProximityPrompt.Triggered 在 Roblox 中,最接近的对应物是一个 Interactable派生组件。从这里开始:

“Touched”拾取 / 触发区域

Roblox 的 BasePart.Touched 是拾取、伤害区域和检查点中非常常见的模式。在 All Out 中,添加一个启用的碰撞体,设置 is_trigger,并分配 on_trigger_start, on_trigger_stayon_trigger_endMovement_Agent 不需要。

使用 Scene.get_all_components_in_range 当你需要广域感知或距离检查时。实体碰撞不会提供类似 Roblox 的通用 Touched 回调。

参见 导航网格与碰撞.


玩家操作(工具 / 按键绑定 / 移动端控制)

如果你习惯了 Roblox 的“工具”脚本或手写输入 + 冷却系统,可以使用 技能 来替代。它们旨在通过一致的 UI 在移动端和 PC 上都能良好工作。


保存数据(DataStoreService → 保存系统)

对于持久化(货币、解锁、进度、装扮),从以下内容开始:


UI(ScreenGui → All Out UI)

Roblox UI 通常从以下内容开始: ScreenGuiFrame/TextButton 层级。在 All Out 中,从这里开始:

从该玩家的 ao_late_update 内部 is_local_or_server().


Roblox 开发者常见的移植陷阱

  • 没有“workspace services”树:不要去寻找 ReplicatedStorage/ServerScriptService 的对应物——请使用编辑器的层级 + 你的项目的 scripts 文件夹。

  • 不要用 Game.is_server():常规玩法运行在预测客户端和权威服务器上。

  • Prefab 组件字段不是彼此独立的覆盖值:当副本需要不同的组件值时,请取消实例关联,或为其另行创建一个预制体。

  • 思考“组件”,而不是“标签”:在你会使用 CollectionService 标签的地方,通常改为添加一个标记/行为组件。

  • 记住场景是 2D 的:使用渲染器层,而不是 Z 变换。


下一步去哪里

最后更新于