为性能设计

*此内容使用人工智能(Beta)翻译,可能包含错误。若要查看英文页面,请点按 此处

为性能设计意味着遵循一小堆最佳实践 当你构建你的体验时 。与在开发过程中稍后找到并解决性能问题相比,提前为性能设计可节省大量时间和精力。

低端设备

低端设备,特别是移动设备,存在严重的内存限制,容易受到内存不足(OOM)错误的影响:

  • 如果您想支持低端设备,请选择至少一个“基线”设备,在整个开发过程中测试您的体验,并注意帧率和内存使用率。当您在体验中发现问题区域时,使用这些区域来识别您设备的限制。

    例如,你可能会测试使用 渲染 ( ShiftF2 ) 和 总结 ( ShiftF2 ) 启用的调试统计数据。如果框架率开始在特别拥挤的区域下降,你可以检查 绘制(场景) 数字,并确定你需要遵守 1,000 次绘制调用和 1,000,000 个三角形的限制,才能确保体验在你的基准设备上顺利运行。

    或者,你可以检查 开发者控制台 ( F9 ),注意内存使用量会略高,除非启用 流式传输。清楚地了解设备限制可以帮助你在继续构建体验时保持在它们下面。

  • Roblox Studio 中的设备模拟器有助于检查比例率和控件,但不适合检查内存使用;当你在 Studio 测试体验时,它运行服务器和客户端,因此内存使用量显著增加。

更一般地,在各种设备上进行测试可以帮助您检查体验是否符合不同图像质量等级下的视觉和性能期望。了解有关如何为低端移动设备优化您的体验的更详细示例,请参阅实世建筑和脚本优化

传输和传送

  • 实例流式 让 Roblox 动态加载和卸载 3D 内容,对大多数地方来说,尤其是更大的地方来说是一个很好的选择。传输可提高加入时间,减少内存足迹,并提高帧率。了解更多信息,请参阅提高性能

  • 考虑将大型位置拆分为更容易管理的部分,并使用 传送 将玩家之间移动。这种方法可以减少 初始 加入时间,但在玩家从一个地方传送到另一个地方时,强制添加额外的加入时间。内存使用的好处会根据地方的大小以及您是否启用了流式传输而变化。

    即使忽略性能考虑,你也可能发现有多个地点会简化开发过程,尤其是如果你定期添加新内容到你的体验或者属于更大的团队的一部分。

材料和复制品

  • 内置材料使用的内存远少于自定义纹理,但可能不匹配你的艺术愿景。尽可能使用材料,以节省对体验中心的纹理的内存预算。

  • 当你创建资产时,将它们转换为 包装。将包裹纳入您的工作流程可避免出现具有不同ID的重复资产的常见问题,这可能会影响性能。

  • 当你添加网格和纹理时,使用并重复它们,而不是导入重复副本。通过调整大小、旋转和重叠,您可以创建富有多样性的环境,需要很少的 绘制调用 。了解更多信息,请参阅移除重复纹理

透明度

  • 避免透明度值超过 0(可见)和 1(不可见)。当您使用部分透明时,请特别注意避免高透明度溢出

脚本

  • 尽可能地,写事件驱动的代码而不是每帧计算。在 60 FPS 下,每帧的总预算为 16.67 毫秒 (ms)。即使是似乎微不足道的每帧计算也可以使用该预算的大部分。

  • 找到方法来将运行时间较长的代码拆分为可管理的块。如果一个代码需要 100 毫秒才能执行,每帧运行它,你的体验只能以 10 FPS 运行。如果你决定只在每秒运行一次代码,在其他情况下以 60 FPS 运行的体验,那么你的 59 个帧将在 16.67 ms 后到达……然后是 100 ms 后的一个,导致粗略闪烁。

    相反,调查您如何可以分解代码。也许你可以每帧执行 5 ms 的工作,使用 task.wait() ,并在保持 60 FPS 的情况下每 20 帧完成计算。多线程,也称为并行 Luau,也可以提供帮助。

  • 使用 RBXScriptConnection:Disconnect() 方法来停止函数在下次触发事件时不必要地被调用。

  • 不要每次需要值时都调用同一方法。一次调用方法,存储值,然后根据需要在稍后重写它。

  • 不要将所有内容存储在 ReplicatedStorage 中。客户端加载这个容器中的所有内容。相反,使用 ServerStorage 为客户端不需要访问的任何东西。