每个地方都由数据模型表示,这是一个描述该地方所有内容的对象层次结构。数据模型包含构成 3D 世界的所有对象,例如部件、地形、照明和其他环境元素。它还包含可以控制运行时行为的对象,例如修改属性、调用方法和函数的脚本,以及响应事件以启用动态行为和交互性。
Roblox 引擎使用数据模型作为地方状态的真实来源,以便在客户端设备上进行模拟和渲染。有关 Roblox 引擎如何解释数据模型的更多信息,请参见 客户端-服务器运行时。
对象
您可以在数据模型中放置和组织对象,以描述 Roblox 中的一个地方。Roblox 中的每个对象都继承自 Instance 类,该类定义了所有对象共有的通用属性、方法和事件。对象还根据其提供的功能定义自己的特性。对象有许多类别,具有广泛的用途,但您将经常使用 BasePart 和 LuaSourceContainer 对象,通常称为部件和脚本。
有关 Roblox 引擎所有功能的全面列表,请参见 参考文档。
3D 建筑块
BasePart 是世界中物理模拟 3D 建筑块的核心类。它定义了所有物理对象的属性和方法,具有位置、大小和方向等属性。
| 对象 | 描述 |
|---|---|
| Part | 一种原始的 部件,可以呈现为块、球体、圆柱体、楔形或角楔的形状。 |
| MeshPart | 从 3D 建模软件(如 Maya 或 Blender)导入的 网格。 |
| TrussPart | 一个可以像梯子一样攀爬的桁架梁。 |
虽然理论上您可以仅使用简单的部件创建一个完全功能的 Roblox 游戏,但您很可能会导入 网格,并通过 实体建模 将原始部件组合成更复杂的对象和结构。
脚本
您可以通过脚本为您地方的 3D 世界添加交互性和行为,并定义逻辑。您使用 Luau 编程语言编写脚本,以执行诸如移动部件、调用其他脚本和响应事件等操作。由于 Roblox 采用客户端-服务器模型,您可以在服务器、客户端上运行脚本,或让它们跨网络边界进行通信。
- Script 对象表示只能在服务器上运行的脚本。
- LocalScript 对象表示只能在客户端上运行的脚本。
- ModuleScript 对象表示可重用的脚本,您可以从服务器和客户端脚本中 require()。
为了使脚本正常工作,您必须将它们放置在数据模型中的正确容器中。有关更多信息,请参见 服务器 和 客户端 部分。
对象组织
虽然您在组织数据模型时有很大的灵活性,但 Roblox 引擎期望某些对象位于特定的 容器服务 中,这些对象具有特定的行为,并且可以影响其包含对象的行为。容器服务的主要类别包括:
- 工作区 — Workspace 存储所有在 3D 世界中渲染的对象。
此外,您还可以使用以下对象进一步组织您的对象:
- 文件夹 — Folder 用于组织目的,不定义任何行为。例如,您可以使用文件夹将类似的对象分组,例如在服务器存储中的一组脚本。
- 模型 — Model 主要用于几何部件的分组,例如将包括椅子、桌子和灯的桌子组合在一起。要组织更复杂的集合,您甚至可以将模型嵌套在模型中。
工作区
Workspace 包含构成地方 3D 世界的所有对象。您可以将对象添加到工作区,以自定义您的 3D 世界,例如基础部件、网格部件和模型。客户端渲染此容器中出现的所有内容,而不渲染其外部的内容,因此您可以控制用户在您的地方看到和交互的内容。尽管实际上没有渲染,您还可以添加与其关联的部件和模型的脚本。默认情况下,工作区预先填充了 Terrain 和 Camera 对象。
相机
Camera 决定客户端如何查看 3D 世界。默认情况下,工作区中有一个相机,但您可以添加多个相机对象以创建不同的视角和视图。每个客户端都采用这些设置并创建自己的相机视图,服务器无法直接修改。
例如,您可以设置相机跟随用户的移动或保持固定在特定位置。您还可以调整视场、距离和角度,以创建用户查看 3D 世界的不同视觉效果。
有关更多信息,请参见 自定义相机。
地形
Terrain 让您为您的地方创建景观。您可以将材料应用于地形,以模拟所需的自然环境,例如草、水、沙子或自定义材料。尽管您只能为您的 3D 世界拥有一个地形对象并将一种材料应用于该地形,但您可以使用 地形编辑器 编辑地形的区域。
有关更多信息,请参见 环境地形。
环境
自定义照明可以使您的 3D 世界更加身临其境和真实。Lighting 服务包含控制您地方的全局照明设置的对象,例如用于模拟大气效果的 Atmosphere 或用于改变您环境中的太阳、月亮和星星的 Sky。此外,您可以使用 光源 从特定对象发出光。
为您的游戏添加 音频 对于将您的游戏提升到新高度也至关重要。通过战略性地使用位置音频和非位置音频,您可以让玩家沉浸在您的世界中,为他们的行为提供有用的反馈,并引导他们注意他们需要做什么以成功实现目标。
复制
复制 是服务器与所有连接的客户端同步您地方状态的过程。Roblox 引擎在许多情况下智能且自动地在服务器和客户端之间复制数据、物理和聊天消息,但您也可以通过将某些对象放置在特定容器中来指定要复制的对象。
ReplicatedFirst
ReplicatedFirst 包含您希望在客户端加入您的地方时复制的对象。它通常包含初始化玩家所必需的对象,例如客户端的 LocalScript 对象和与脚本相关的对象。此容器中的所有内容仅从服务器复制到客户端一次。
ReplicatedStorage
ReplicatedStorage 包含服务器和连接的客户端都可以访问的对象。客户端上发生的任何更改都会保留,但不会复制到服务器。服务器可以覆盖客户端上的更改以保持一致性。此容器通常用于需要由 Script(服务器端)和 LocalScript(客户端)对象共享和访问的 ModuleScript 对象。此外,您可以使用此容器复制任何在需要之前不需要存在于 3D 世界中的对象,例如用于克隆和父级到所有传入角色模型的 ParticleEmitter。
有关复制工作原理的更多信息,请参见 客户端-服务器运行时。
服务器
数据模型定义了专用于服务器端对象的专用容器,这些对象从不复制到客户端。这使得服务器能够影响客户端的行为和状态,而不将服务器的对象和逻辑暴露给客户端。
ServerScriptService
ServerScriptService 包含 Script 对象、服务器脚本所需的 ModuleScript 对象以及仅用于服务器使用的其他与脚本相关的对象。如果您的脚本需要其他非脚本对象,您必须将它们放置在 ServerStorage 中。此容器中的脚本从不复制到客户端,这使您能够拥有安全的服务器端逻辑。
ServerStorage
ServerStorage 包含仅用于服务器使用的对象。您可以使用此容器存储您希望在运行时克隆并父级到工作区或其他容器的对象。例如,您可以在此容器中存储大型对象(例如地图),直到需要时再将它们移动到工作区。这使您能够减少初始加入时客户端的网络流量。
客户端
客户端容器服务用于复制到每个连接客户端的对象。这类容器复制到每个连接的客户端,通常包含 3D 对象和相关的 LocalScript 对象。您存储在这些容器中的所有对象在会话之间是非持久的,并且每次客户端重新加入时都会重置。您可以将对象放入这些容器中,例如玩家 GUI、客户端脚本和其他仅与客户端相关的对象。
当客户端连接到服务器时,Players 容器服务监听用户加入您的地方,并为每个客户端创建一个 Player 对象。服务器将编辑数据模型中的客户端容器中的对象复制到 Players 对象内的运行时数据模型中的相应位置。下表描述了它们在容器中所处的原始容器以及它们在客户端被复制到的结果容器:
| 编辑数据模型 | 运行时数据模型 | 备注 |
|---|---|---|
| StarterPack | Player.Backpack | 设置玩家库存的脚本,通常包含 Tool 对象,但通常也包含本地脚本。 |
| StarterGui | Player.PlayerGui | 可以管理玩家本地 GUI 的脚本。当玩家重生时,PlayerGui 的内容会被清空。服务器将 StarterGui 中的对象复制到 PlayerGui。 |
| StarterPlayerScripts | Player.PlayerScripts | 用于客户端的通用脚本。例如,如果您希望在满足某些条件时在客户端创建特效,您可以在此容器中放置一个本地脚本来实现。服务器无法访问此容器。 |
| StarterCharacterScripts | Player.Character | 在玩家生成时复制到客户端的脚本。这些脚本在玩家重生时不会持久。 |
| ReplicatedFirst | 此容器的内容首先复制到所有客户端(但不返回服务器),然后再复制其他内容。 |
聊天
TextChatService
TextChatService 代表处理各种游戏内文本聊天任务的服务,例如管理频道、装饰消息、过滤文本、创建命令和开发自定义聊天界面。
有关更多信息,请参见 文本聊天概述。
VoiceChatService
VoiceChatService 代表基于接近度的语音聊天功能,根据您与其他用户的距离模拟真实的通信。您可以使用此服务来切换该功能的开启和关闭。
有关更多信息,请参见 语音聊天。
文件夹和模型
在数据模型中有两种主要方法用于分组对象:文件夹和 模型。两者都是对象的容器,但目的不同。
- 文件夹 最适合存储环境的部分,例如大厅或战斗竞技场。
- 模型 用于一组对象,例如包括椅子、桌子和灯的桌子组合。要组织更复杂的集合,可以将模型嵌套在模型中。
您应该始终以描述性命名您的对象。这使得在需要时更容易找到和修改对象。

