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

