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

Андрей Панов Игровые движки
1.2k
5

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

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

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

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

Решение
66
Эксперт • 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%. Спасибо огромное, несколько дней мучился.

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

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

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

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

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

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

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

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

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

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

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

У меня тоже тауердефенс завис на этапе оптимизации, уже месяц не могу выпустить нормально 🙁 Heartbeat на мобов это была моя первая ошибка тоже. Хорошо что спросил, сам бы не додумался переписывать.

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

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

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

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