Оптимизация: чтобы игра шла на телефоне

Большая часть аудитории Roblox играет с телефонов, и там мало памяти и слабый GPU. Игра, которая тормозит, теряет игроков быстрее, чем игра без контента.

Что чаще всего тормозит

  • Слишком много деталей в кадре — особенно мелких и прозрачных
  • Частицы и источники света без ограничений
  • Циклы, которые работают каждый кадр и трогают весь Workspace
  • Тяжёлые модели из Toolbox, вставленные без разбора
  • Интерфейс из сотен элементов, которые не скрываются

Простые приёмы, которые работают

  • Объединяй статичную геометрию и включай StreamingEnabled для больших карт
  • Ставь деталям Anchored, если они не должны падать: физике меньше работы
  • Убирай CanCollide и CanQuery у декораций — меньше проверок столкновений
  • Не создавай объекты в цикле без удаления: утечка памяти убивает сессию через полчаса
  • Считай тяжёлое на сервере редко, а не на клиенте часто

Измеряй, а не угадывай

В Studio есть Micro Profiler, окно статистики и Performance Stats в самой игре. Они показывают, на что уходит кадр, — и почти всегда это не то, на что думал автор.

Порядок такой: воспроизвести просадку, посмотреть профиль, поправить одно место, измерить снова. Оптимизация «на всякий случай» только усложняет код.

Правильный цикл

StarterPlayerScripts/Timer.client.lua
  1. local RunService = game:GetService("RunService")
  2.  
  3. local elapsed = 0
  4.  
  5. RunService.Heartbeat:Connect(function(delta)
  6. elapsed += delta
  7.  
  8. if elapsed < 0.5 then
  9. return
  10. end
  11.  
  12. elapsed = 0
  13. -- сюда редкую проверку: раз в полсекунды, а не 60 раз в секунду
  14. end)