在 重用代码 中,您可能已经注意到频繁使用 game:GetService() 方法。Roblox 服务使您能够访问引擎的内置功能,比如销售游戏内物品、启用聊天、播放声音、动画对象和管理实例。
事实上,服务是 Roblox 开发中最基本、最常见模式 的第一步:
- 获取服务。
- 引用模块脚本。
- 添加本地函数。
- 添加触发这些函数的 事件。
例如,您可能希望在玩家退出游戏时保存他们在世界中的位置:
local Players = game:GetService("Players")
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local SaveManager = require(ReplicatedStorage:WaitForChild("SaveManager"))
-- 调用模块脚本中的可重用函数的本地函数。
local function saveProgress(character)
-- 获取玩家角色的位置。
local position = character:FindFirstChild("HumanoidRootPart").Position
-- 使用模块脚本中的 saveData 函数,该函数写入到
-- DataStoreService。
SaveManager.saveData(character, position)
end
-- 另一个本地函数,当角色从游戏中移除时调用 saveProgress()
--(在此情况下,当玩家离开时)。
local function onPlayerAdded(player)
player.CharacterRemoving:Connect(saveProgress)
end
-- 当玩家首次连接到游戏时调用 onPlayerAdded。
Players.PlayerAdded:Connect(onPlayerAdded)
一些关键细节包括:
- 由于您每个脚本只应检索一次服务,因此惯例是将变量命名为与服务相同的名称。这一惯例同样适用于模块脚本。
- 您通过全局变量 game 检索服务,该变量引用数据模型的根。
- Roblox 不保证加载顺序(并且 实例流 进一步加复杂了在任何给定时间是否加载),因此使用 Instance:WaitForChild() 是一项重要的安全措施。
在识别可以帮助您为游戏添加所需功能的服务时,Roblox 开发的一个重要部分是识别众多服务中的哪些可以帮助您。在上面的例子中,您使用 云服务 来存储数据,而不是使用标准 I/O 库将数据写入磁盘。
容器服务
容器服务可以包含和影响其他对象。这些容器服务存在于数据模型的根节点,并在 Studio 的 Explorer 窗口中可见。这些容器服务共同形成数据模型的结构层次,使 Roblox 引擎能够正确解释和渲染您的地方。以下表格包含一些常见的容器服务。
| 服务 | 描述 |
|---|---|
| Workspace | 包含所有在 3D 世界中渲染的对象,如零件和地形。 |
| Lighting | 包含设置通用照明效果的对象,如 Atmosphere 和 Sky。 |
| ReplicatedStorage 和 ReplicatedFirst | 包含服务器与客户端之间复制的内容和逻辑。 |
要进一步检查数据模型,您可以使用以下方法:
- game:FindService() 搜索指定服务的实例。
- game:GetChildren() 返回数据模型的所有根子项的数组,即顶层容器服务。
- game:GetDescendants() 返回数据模型的所有后代的数组,包括所有容器服务及其子项。
有关容器服务的更多信息,请参见 数据模型 文档。
脚本服务
脚本服务提供在 Roblox 引擎中在脚本内部调用的标准功能。以下表格包含一些常见的脚本服务。
| 服务 | 描述 |
|---|---|
| TweenService | 用于将其他实例的数值属性从一个起始值插值到一个结束值,具有缓动方向和样式、重复和延迟的选项。 |
| MarketplaceService | 负责游戏内交易的服务,如提示玩家购买开发者产品、订阅、通行证、Roblox Premium 等。 |
| RunService | 包含逐帧时间管理的方法和事件,以及检查游戏运行上下文(服务器、客户端、Studio 模式)的方法。对每个运行时帧运行任何过程或更新非常有用。 |
| SoundService | 控制游戏中音频播放的各种全局方面,如多普勒缩放和体积音频。还可以包含声音组,以一次控制多个音频信号的音量和动态效果属性。 |
| CollectionService | 管理带标签的实例组(集合),这些标签从服务器复制到客户端,让您更容易分配和处理相关实例的组。 |
云服务
Roblox 还有特殊的云服务,用于处理在 Roblox 云中发生的任务和过程。以下表格包含一些常见的云服务。
| 服务 | 描述 |
|---|---|
| DataStoreService | 用于跨会话存储持久化数据。 |
| MemoryStoreService | 用于存储频繁且瞬态的数据,这些数据迅速变化。 |
| MessagingService | 用于在实时会话期间多个服务器之间进行通信。 |
云服务也具有相应的 Web API;可以从外部脚本或工具访问。有关更多信息,请参见 开放云。