Когда в игре появляется много NPC, они могут начинать мешать друг другу: толкаться, застревать, сбивать маршруты или блокировать двери. Это выглядит неаккуратно и портит игровой процесс. К счастью, Роблокс Студио позволяет полностью отключить столкновения между NPC с помощью PhysicsService.
В этой статье разберём, как это работает, и приведём готовый скрипт, который можно сразу вставить в свою игру.
Зачем отключать столкновения NPC?
Отключение коллизий полезно, если:
- у вас много NPC в одном помещении;
- персонажи ходят по навигационным точкам и сбивают друг друга с маршрутов;
- NPC стоят в очередях или группах;
- нужно добиться более плавного поведения толпы;
- игра предполагает большое количество движущихся моделей (например, симулятор).
Без изменения настроек столкновений NPC начинают взаимодействовать друг с другом как физические объекты — и это часто вызывает проблемы.
Как работает система групп коллизий
Роблокс Студио предоставляет PhysicsService — сервис, который позволяет:
- создавать группы коллизий;
- управлять тем, какие группы могут сталкиваться;
- назначать эти группы конкретным деталям (BasePart).
Смысл простой: вы создаёте отдельную группу NPC и говорите Роблоксу, что объекты внутри неё НЕ должны сталкиваться друг с другом.
Готовый скрипт для отключения коллизий NPC
Скопируйте этот скрипт в ServerScriptService или внутрь папки с NPC:
local PhysicsService = game:GetService("PhysicsService");
local NpcFolder = workspace.NPC;
PhysicsService:RegisterCollisionGroup("NPC");
PhysicsService:CollisionGroupSetCollidable("NPC", "NPC", false);
for _, NPC in NpcFolder:GetChildren() do
if NPC:IsA("Model") then
for _, Child in NPC:GetChildren() do
if Child:IsA("BasePart") then
Child.CollisionGroup = "NPC";
end;
end;
end;
end;Подробное объяснение
1. Получаем PhysicsService
local PhysicsService = game:GetService("PhysicsService");Этот сервис отвечает за физическое взаимодействие объектов.
2. Указываем папку с NPC
local NpcFolder = workspace.NPC;Здесь должны находиться ваши модели NPC.
3. Создаём группу коллизий
PhysicsService:RegisterCollisionGroup("NPC");Мы создаём новую группу под названием NPC.
4. Отключаем столкновения внутри группы
PhysicsService:CollisionGroupSetCollidable("NPC", "NPC", false);Теперь NPC не будут сталкиваться друг с другом — они свободно проходят сквозь модели своей группы.
5. Назначаем детали NPC в нужную группу
for _, NPC in NpcFolder:GetChildren() do
if NPC:IsA("Model") then
for _, Child in NPC:GetChildren() do
if Child:IsA("BasePart") then
Child.CollisionGroup = "NPC";
end;
end;
end;
end;Каждому BasePart внутри моделей NPC назначается группа NPC.
После этого NPC перестают блокировать друг друга и начинают двигаться гораздо плавнее.
Видео-объяснение
Посмотрите короткое видео, где наглядно показано, как всё работает:
Хотите научиться создавать игры в Роблокс Студио?
Если вы хотите научиться:
- настраивать NPC,
- создавать квесты,
- работать с GUI,
- моделировать уровни,
- писать скрипты на Lua,
- делать полноценные проекты…
Записывайтесь на обучение через сайт: https://roblo.ru
Научу работать в Роблокс Студио с нуля и создавать игры, которые выглядят профессионально!
