设计以提高性能意味着在构建游戏时遵循一系列最佳实践。与在开发过程中后期发现并修复性能问题相比,早期进行性能设计可以为您节省大量时间和精力。
低端设备
低端设备,尤其是移动设备,内存限制严重,易因内存不足(OOM)错误而崩溃:
如果您想支持低端设备,请选择至少一个“基准”设备,在整个开发过程中对其测试您的游戏,并密切关注帧率和内存使用情况。当您发现游戏中的问题区域时,可以利用这些区域来确定您设备的极限。
例如,您可能会在调试统计信息启用时测试一个游戏,使用渲染(ShiftF2)和汇总(ShiftF2)。如果在某个特别拥挤的区域帧率开始下降,您可以检查**绘制(场景)**数字,并确定为使游戏在您的基准设备上良好运行,需要保持在1,000个绘制调用和1,000,000个三角形以下。
或者您可以检查开发者控制台(F9),并注意到除非您启用流媒体,否则内存使用有点高。清楚了解设备的限制可以帮助您在继续构建游戏时保持在这些限制之内。

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