为了性能进行设计意味着在构建游戏时遵循一些最佳实践。与在开发过程中后期发现和修复性能问题相比,早期进行性能设计可以为您节省大量时间和精力。
低端设备
低端设备,特别是移动设备,具有严重的内存限制,并且容易由于内存溢出(OOM)错误而崩溃:
如果您想支持低端设备,请选择至少一个“基准”设备,在整个开发过程中在上面测试您的游戏,并密切关注帧率和内存使用情况。当您发现游戏中的问题区域时,可以用这些区域来确定设备的限制。
例如,您可以在启用 Render (ShiftF2) 和 Summary (ShiftF2) 调试统计数据的情况下测试游戏。如果在一个特别混乱的区域里帧率开始下降,您可以检查 Draw (scene) 数字,确定在基准设备上运行游戏时,您需要保持在1,000次绘制调用和1,000,000个三角形以下。
或者您可以检查 开发者控制台 (F9),并注意到内存使用量有点高,除非启用 流式处理。明确了解设备限制可以帮助您在继续构建游戏时保持在这些限制之下。

Roblox Studio中的设备模拟器对于检查宽高比和控件很有用,但对于内存使用情况并不准确;在Studio中测试游戏时,它会同时运行服务器和客户端,因此内存使用量会显著更高。
更一般地说,在各种设备上进行测试可以帮助您检查在不同图形质量级别下游戏是否符合您的视觉和性能预期。有关如何优化游戏以适应低端移动设备的详细示例,请参见 真实世界的构建和脚本优化。
流式处理和传送
实例流式处理使Roblox能够动态加载和卸载3D内容,是大多数地方,尤其是较大地方的极好选择。流式处理能够改善加入时间,减少内存占用,并提高帧率。
例如,当您启用 Workspace.EnableSLIMAvatars 并将您的世界模型的 LevelOfDetail 属性设置为 SLIM 时,您可以创建拥有社交空间和拥挤事件的世界,同时在设备能力的广泛范围内保持视觉上的繁荣。有关更多信息,请参见 提高性能。
考虑将大型地方拆分为更易于管理的地方,并使用传送在它们之间移动玩家。这种方法可以减少初始加入时间,但在玩家从一个地方传送到另一个地方时会增加额外的加入时间。内存使用的好处因地方的大小和您是否启用流式处理而异。
即使忽略性能考虑,您可能会发现拥有多个地方可以简化开发过程,特别是当您定期向游戏添加新内容或是大型团队的一部分时。
材料和重复
内置材料使用的内存远低于自定义纹理,但可能与您的艺术愿景不匹配。尽可能使用材料,以便为对您的游戏至关重要的纹理节省内存预算。
在创建资产时,将它们转换为包。将包作为工作流程的一部分,有助于避免常见的不同ID的重复资产问题,这可能会影响性能。
透明度
- 避免使用0(可见)和1(不可见)以外的透明度值。当您使用部分透明度时,尤其要小心避免高透明度过度绘制。
脚本编写
尽可能编写基于事件驱动的代码,而不是每帧计算代码。在60 FPS下,每个帧的总预算为16.67毫秒(ms)。即使看似微不足道的每帧计算也可能占用该预算的很大一部分。
寻找将长时间运行的代码分解为可管理的块的方法。如果一段代码执行需要100毫秒,并且您每帧都运行它,您的游戏只能以10 FPS运行。如果您决定在一个原本以60 FPS运行的游戏中每秒只运行一次该代码,59帧将在16.67毫秒后到达……然后一帧在100毫秒后到达,这会造成突兀的卡顿。
相反,调查一下如何将代码拆分开。也许您可以每帧执行5毫秒的工作,使用 task.wait(),并每20帧完成计算,同时保持60 FPS。 多线程,有时称为并行Luau,也可以提供帮助。
使用 RBXScriptConnection:Disconnect() 方法来停止下次事件触发时不必要的函数调用。
不要每次需要一个值时都调用相同的方法。调用一次该方法,存储该值,然后在必要时再覆盖它。
不要将所有内容存储在 ReplicatedStorage 中。客户端会加载此容器中的所有内容。相反,对于客户端不需要访问的任何内容,请使用 ServerStorage。