Roblox
如果你曾在 Roblox 上制作过游戏,有一些关键差异你需要了解以在 All Out 上入门!
如果你来自 Roblox Studio + Lua,本页将帮助你将你的思维模型转换为 All Out + CSL(All Out 的脚本语言)。
主要区别(一览)
实体 + 组件(而非 实例 + 服务):世界由 层级中的实体构建,行为来自添加组件(内置或脚本化)。
多人功能是“内置的”:CSL 的设计使大多数游戏玩法代码可以像单人游戏那样编写,引擎会同步相关状态。
CSL 是静态类型的:它的感觉更接近 Go/Odin 而非 Lua。(见 开始使用 CSL.)
Roblox → All Out 速查表
Place / Experience
All Out 游戏项目
你的本地项目文件夹包含一个 scripts 目录用于 .csl 文件。
资源管理器 / 工作区
层级
层级显示当前世界/场景中的所有实体。
属性窗口
检查器
在此编辑实体/组件字段并添加组件。
属性(Attributes)
序列化的组件字段
使用以下方式向编辑器公开字段 @ao_serialize (下方示例)。
Touched / Region3 / GetPartsInPart
范围查询(目前)
碰撞进入/退出回调尚未暴露;使用 Scene.get_all_components_in_range (见 导航网格与碰撞).
你的第一个小时(推荐路径)
了解如何通过
脚本思维模型(Lua → CSL) 在 Roblox 中你通常会编写一个/Script LocalScript来查找对象(Workspace.Foo.Bar
)并连接事件。在 All Out 中,你通常会: 用 CSL 编写 组件类(行为)。
在编辑器中将它们附加到实体(或在运行时生成实体并添加组件)。
使用
@ao_serialize在组件上存储可调值(以便你可以在检查器中为每个实体调整)。
下面是一个小示例,感觉像是“放在对象下的 Script”,但以 CSL 组件的形式表达:
如果你想要一个每个服务器/会话运行一次的“游戏脚本”,你通常会把它放在你的主生命周期过程(尤其是, ao_start,等)中。参见 开始使用 CSL.
你会识别的交互(以及它们如何转换)
ProximityPrompt → Interactable
如果你在 Roblox 中使用了 ProximityPrompt.Triggered ,最接近的等价物是一个 Interactable派生的组件。从这里开始:
“触碰”拾取物 / 触发区
Roblox 的 BasePart.Touched 是拾取物、伤害区和检查点的常见模式。在 All Out 中, 碰撞进入/退出回调在 CSL 中尚未实现,所以标准方法是:
查询附近的玩家/组件
做一个简单的距离检查
如果你需要进入/退出事件,追踪上一帧谁在“内部”
见以下的“伪碰撞行为”:
玩家行为(工具 / 键位绑定 / 移动端控制)
如果你习惯于 Roblox 的“工具”脚本或自制的输入 + 冷却系统,改用 能力(Abilities) 。它们在移动端和 PC 上与一致的 UI 一起工作得很好。
保存数据(DataStoreService → 保存系统)
对于持久化(货币、解锁、进度、美化),从以下开始:
UI(ScreenGui → All Out UI)
Roblox UI 通常从 ScreenGui 和 Frame/TextButton 层级开始。在 All Out 中,从这里开始:
Roblox 开发者常见的移植陷阱
没有“工作区服务”树:不要去寻找
ReplicatedStorage/ServerScriptService的等价物——使用编辑器的层级 + 你的项目的scripts文件夹。不要等待 Touched 事件:在 CSL 支持碰撞回调之前使用范围查询(上方链接)。
预制件实例尚未完全参数化:如果你需要许多具有不同值的副本,可能需要“取消链接”或创作独特的实体(见 预制件).
把“组件”当作代替“标签”来思考:在你会使用 CollectionService 标签的地方,你通常会添加一个标记/行为组件。
接下来去哪儿
最后更新于