Блог школы Роблоппа — Роблокс Студио, обучение, познавательные статьи и новости школы

Как отключить столкновения между NPC в Роблокс Студио

2025-11-14 09:28 Туториалы
Когда в игре появляется много 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
Научу работать в Роблокс Студио с нуля и создавать игры, которые выглядят профессионально!