Решён
Как оптимизировать плейс в Roblox Studio под мобильных игроков?

Делаю тауердефенс на Roblox Studio. На ПК все летает, но на мобилках просто слайдшоу. FPS проседает до 10-15 в пике волны, когда на карте одновременно 30+ мобов.

Что пробовал:

  • Уменьшил количество партов в базовых моделях
  • Отключил тени на большинстве источников света
  • Поставил LOD вручную через скрипт (просто меняю Transparency дальних объектов)

Все равно лагает. Подозреваю что проблема в скриптах, у меня сейчас на каждого моба отдельный скрипт с Heartbeat. Это нормально или надо переделывать? Профайлер показывает что на скрипты уходит 60%+ фрейма.

Решение
63
Эксперт • 5 ответов

Проблема точно в Heartbeat на каждого моба. Это классика.

Переходи на один централизованный RunService.Heartbeat в серверном скрипте, который итерируется по таблице всех активных мобов. Примерно так:

local mobs = {}

RunService.Heartbeat:Connect(function(dt)
    for _, mob in ipairs(mobs) do
        updateMob(mob, dt)
    end
end)

Еще момент: если у тебя AI мобов использует PathfindingService и запрашивает пересчет пути каждый фрейм - это убийца производительности. Пересчитывай путь только когда моб застрял или прошел N studs от последней точки маршрута. С 30 мобами одновременный пересчет путей кладет сервер на лопатки мгновенно.

Для мобильных клиентов дополнительно: отключи Streaming Enabled если он есть, или наоборот включи (зависит от размера карты). И глянь в Device Emulator - там можно выставить реальный профиль мобилки и смотреть нагрузку.

Аватар Андрей Панов

Это оно! Переписал на один Heartbeat, сразу с 60% нагрузки на скрипты упало до 18%. Спасибо огромное, несколько дней мучился.

22
Эксперт • 3 ответа

Партам лучше всего помогает Union и MeshPart вместо кучи отдельных базовых деталей. Если у тебя моб состоит из 15 партов - объедини в один меш, коллизии сделай через невидимый упрощенный парт.

Еще советую глянуть микропрофайлер (Ctrl+F6 в клиенте) - он покажет точно что жрет время на клиентской стороне. Обычно там видно сразу.

29
Участник • 1 ответ

Скрипты это одно, но ты не написал сколько у тебя Draw Calls. Открой Stats в Studio (View -> Stats) и посмотри на "Render" секцию. На мобилках порог примерно 1000-1500 draw calls, дальше начинается слайдшоу вне зависимости от Lua оптимизаций.

Если больше - объединяй статичную геометрию карты в один большой меш. Деревья, заборы, декор - всё что не движется можно запечь в один объект.

6
Эксперт • 2 ответа

попробуй поставить качество графики принудительно 1-3 через LocalScript при старте для мобильных клиентов

if UserInputService.TouchEnabled then
    settings().Rendering.QualityLevel = 3
end

не решит проблему со скриптами но хотябы поможет с мобилками пока не оптимизируешь основное

Написать ответ

Премодерация гостей

Вы отвечаете как гость. Ваш ответ будет скрыт до проверки модератором. Чтобы ответ появился сразу и вы получали репутацию — войдите в аккаунт.

Будьте вежливы и соблюдайте правила платформы.