Как сделать NPC в Roblox Studio: создание, движение и диалоги

Автор: Rocket Tech School

Дата публикации: 10.07.2026 | Дата проверки: 10.07.2026

По данным официальной статистики Roblox, на платформе ежемесячно активны десятки миллионов пользователей, и значительная часть популярных игр держится на проработанных NPC: персонажах, которые дают квесты, торгуют и населяют мир. Хорошо сделанный неигровой персонаж превращает пустую карту в живое пространство. В этом гайде разберём с нуля, как сделать NPC в Roblox Studio: от создания модели до диалогов, движения и умного поведения, с рабочим кодом на языке Lua.

Что такое NPC и зачем он нужен в игре

NPC (Non-Player Character) — это неигровой персонаж, которым управляет программный код. В отличие от аватара игрока, NPC действует по заданному сценарию: стоит на месте, ходит по маршруту, отвечает на действия игрока.
NPC решают в игре сразу несколько задач. Они выдают квесты и двигают сюжет вперёд. Они торгуют предметами и работают магазинами. Они создают атмосферу, населяя мир прохожими и животными. Наконец, они выступают противниками — от простых врагов до умных боссов. Даже один продуманный NPC делает игру заметно живее, поэтому создание неигровых персонажей — один из первых серьёзных навыков, который осваивает начинающий разработчик в Roblox.

Что понадобится для создания NPC в Roblox Studio

Прежде чем приступить, нужно понимать, из каких частей состоит любой NPC в Roblox. Каждый неигровой персонаж собирается из нескольких обязательных компонентов:
  • Модель (Model) — контейнер, который объединяет все части персонажа в один объект.
  • Humanoid — специальный объект, который наделяет модель «жизнью»: здоровьем, способностью ходить, анимироваться и использовать pathfinding.
  • HumanoidRootPart — главная деталь, к которой привязано положение персонажа в мире.
  • Скрипт (Script) — код на языке Lua, задающий поведение NPC.
Без объекта Humanoid модель остаётся набором блоков. Именно он превращает статичную конструкцию в полноценного персонажа, поэтому в любом NPC он обязателен.

Как создать модель NPC с помощью Rig Builder

Самый быстрый способ получить готовую модель персонажа даёт встроенный инструмент Rig Builder. Он создаёт полностью собранный «скелет» с Humanoid всего в пару кликов, избавляя новичка от ручной сборки тела из блоков. Существует и второй путь: собрать NPC вручную из отдельных Part. Но для первого персонажа Rig Builder экономит массу времени.
  1. Откройте Roblox Studio и перейдите на вкладку Avatar (в старых версиях она называется Model).
  2. Нажмите кнопку Rig Builder.
  3. Выберите тип телосложения: R15 (современный, из 15 частей) или R6 (простой, из 6 частей). Для новичка подойдёт любой.
  4. Выберите вид рига, например Block Rig или Man Rig, и он появится на сцене.
  5. Переименуйте модель в NPC и убедитесь, что внутри неё есть Humanoid и HumanoidRootPart.
После этого персонаж готов к настройке. Ему можно добавить одежду через объекты Shirt и Pants, вставив ID бесплатных ассетов из каталога Roblox, или изменить цвет и форму отдельных частей. Уже на этом этапе NPC можно поставить на карту, но пока он ничего не умеет: оживим его скриптами.
Разница между R15 и R6 сводится к детализации. R15 состоит из 15 частей, двигается плавнее и поддерживает больше анимаций, поэтому его выбирают для большинства современных игр. R6 из 6 частей проще и легче для слабых устройств, а также подходит для игр в ретро-стиле. Для обучения подойдёт любой вариант, но R15 даёт больше возможностей на будущее.

Как сделать диалог с NPC через ProximityPrompt

Самый современный способ дать игроку возможность заговорить с NPC даёт объект ProximityPrompt. Он показывает подсказку вроде «Нажмите E, чтобы поговорить», когда игрок подходит близко, и запускает действие при нажатии.
Чтобы добавить диалог, вставьте ProximityPrompt внутрь HumanoidRootPart персонажа, затем добавьте BillboardGui с текстовой меткой над головой NPC и Script со следующим кодом:
local npc = script.Parent
local prompt = npc.HumanoidRootPart.ProximityPrompt
local dialogue = npc.HumanoidRootPart.BillboardGui

local lines = {
"Привет, путник!",
"Добро пожаловать в нашу деревню.",
"Возвращайся, если понадобится помощь."
}

prompt.Triggered:Connect(function(player)
local line = lines[math.random(1, #lines)]
dialogue.TextLabel.Text = line
dialogue.Enabled = true
task.wait(4)
dialogue.Enabled = false
end)

Скрипт слушает срабатывание подсказки. Когда игрок нажимает клавишу, NPC показывает над головой случайную фразу из списка на четыре секунды, а затем прячет её. Чтобы диалог не был виден постоянно, свойство Enabled у BillboardGui нужно заранее выключить в настройках.
ProximityPrompt удобнее устаревшего ClickDetector, потому что показывает игроку точную подсказку с нужной клавишей и работает одинаково на компьютере, телефоне и геймпаде.
Диалог можно развить дальше. Вместо случайной фразы легко сделать последовательный разговор: хранить индекс текущей реплики и увеличивать его при каждом нажатии, пока не закончатся строки. Если добавить кнопки выбора ответа через обычный GUI, получится полноценная диалоговая система с ветвлением, как в больших ролевых играх.

Как заставить NPC ходить с помощью PathfindingService

Чтобы NPC перемещался по карте и обходил препятствия, используют службу PathfindingService. Она рассчитывает маршрут от текущей позиции персонажа до цели и выдаёт последовательность точек, по которым нужно пройти.
Вот базовый скрипт движения NPC к заданной точке:

local npc = script.Parent
local humanoid = npc:WaitForChild("Humanoid")
local root = npc:WaitForChild("HumanoidRootPart")

local PathfindingService = game:GetService("PathfindingService")
local goal = workspace.Goal.Position

local path = PathfindingService:CreatePath()
path:ComputeAsync(root.Position, goal)

local waypoints = path:GetWaypoints()
for _, waypoint in ipairs(waypoints) do
humanoid:MoveTo(waypoint.Position)
humanoid.MoveToFinished:Wait()
end

Метод CreatePath создаёт пустой маршрут, ComputeAsync рассчитывает путь от позиции NPC до цели, а GetWaypoints возвращает список точек-ориентиров. Дальше цикл ведёт персонажа от точки к точке через Humanoid:MoveTo, дожидаясь прибытия в каждую через MoveToFinished.
Главное преимущество PathfindingService в том, что персонаж самостоятельно прокладывает путь в обход стен и препятствий. Часто NPC должен патрулировать территорию: для этого на сцене расставляют несколько ориентиров и в цикле отправляют персонажа к ним по очереди.

Как сделать умного или агрессивного NPC

Умный NPC реагирует на игрока: замечает его приближение, преследует, атакует. В основе такого поведения лежит постоянная проверка расстояния между NPC и ближайшим игроком.
Вот пример скрипта агрессивного NPC, который преследует игрока, если тот подошёл ближе определённой дистанции:

local npc = script.Parent
local humanoid = npc:WaitForChild("Humanoid")
local root = npc:WaitForChild("HumanoidRootPart")
local players = game:GetService("Players")

local detectRange = 30

while task.wait(0.5) do
local nearest, shortest = nil, detectRange
for _, player in ipairs(players:GetPlayers()) do
local char = player.Character
if char and char:FindFirstChild("HumanoidRootPart") then
local dist = (char.HumanoidRootPart.Position - root.Position).Magnitude
if dist < shortest then
nearest, shortest = char, dist
end
end
end
if nearest then
humanoid:MoveTo(nearest.HumanoidRootPart.Position)
end
end

Скрипт каждые полсекунды проверяет всех игроков на карте, находит ближайшего в радиусе обнаружения и направляет к нему NPC. Меняя переменную detectRange, можно настроить, насколько «зорким» будет персонаж.
Такое поведение называют конечным автоматом состояний. У NPC есть несколько состояний (например, «покой», «преследование» и «атака»), и он переключается между ними в зависимости от ситуации. Этот подход лежит в основе ИИ почти всех игровых противников.

Как добавить анимацию для NPC

Без анимации NPC двигается скованно, как манекен. Чтобы персонаж махал рукой, шёл или атаковал живо, ему добавляют анимации через встроенный Animation Editor.
Порядок работы такой:
  1. Выделите NPC и откройте Animation Editor на вкладке Avatar.
  2. Создайте новую анимацию и задайте ей имя.
  3. Двигая части тела персонажа и расставляя ключевые кадры (keyframes) на таймлайне, соберите нужное движение.
  4. Экспортируйте анимацию, и Roblox выдаст её уникальный ID.
  5. Вставьте полученный ID в объект Animation внутри персонажа и запустите его через скрипт.
Готовые анимации можно и не создавать вручную: в каталоге Roblox есть множество бесплатных анимаций ходьбы, бега и жестов, которые подключаются по ID. Для первого NPC этого достаточно.
У анимации и движения разные роли. PathfindingService определяет, куда идёт персонаж, а анимация показывает, как при этом двигаются его руки и ноги. Без анимации NPC будет скользить по земле в позе буквы «Т», что сразу выдаёт недоработку.

Какие ошибки чаще всего допускают новички

При создании первого NPC почти все спотыкаются об одни и те же проблемы. Вот самые частые ошибки:
  • Забытый объект Humanoid. Без него модель не считается персонажем: не ходит, не анимируется, не работает с pathfinding.
  • Скрипт вместо LocalScript и наоборот. Логика поведения NPC должна быть в обычном Script на сервере, иначе персонаж будет вести себя по-разному у разных игроков.
  • Неверное имя детали. Pathfinding и анимации ожидают части с точными именами вроде HumanoidRootPart. Опечатка ломает всё.
  • Слишком частая проверка в цикле. Если проверять расстояние до игрока каждый кадр без задержки, игра начнёт тормозить. Пауза через task.wait обязательна.
  • Тестирование в одиночку. Поведение, завязанное на игроков, нужно проверять в режиме нескольких клиентов через меню Test. Одиночный запуск для этого не подходит.

С чего начать ребёнку, который хочет делать игры в Roblox

Roblox — одна из самых доступных платформ для первого знакомства с настоящим программированием. Язык Lua, на котором пишут скрипты, проще многих других, а результат виден сразу в игре, что сильно мотивирует ребёнка продолжать.

Оптимальный возраст для старта — 9–10 лет. К этому времени ребёнок готов освоить базовую логику скриптов: переменные, условия, функции. Создание NPC — отличная первая серьёзная задача, потому что она объединяет сразу многое: работу с моделями, событиями, циклами и сервисами Roblox.

Отдельный плюс Roblox Studio — возможность сразу показать результат друзьям. Готовая игра с работающим NPC, которую можно отправить другому игроку по ссылке, мотивирует продолжать куда сильнее, чем любое учебное упражнение без видимого результата. Именно поэтому разработка в Roblox — популярный первый шаг в мире геймдева для детей по всему миру.

Ребёнку полезно придумывать и делать собственные проекты. Когда он сам создаёт персонажа и решает, как тот должен себя вести, программирование превращается из переписывания кода в творчество с понятной целью.

В Rocket Tech School дети осваивают Roblox Studio и язык Lua на практике: создают собственные игры с NPC, квестами и механиками. Освоив основы здесь, ученики затем переходят к более сложным движкам, например к Unity, и к профессиональным языкам вроде Python, уже понимая, как устроена разработка игр изнутри.
ЧТО ЕЩЕ ПОЧИТАТЬ
Программирование, создание игр, цифровое творчество и нейросети — выбирайте направление в IT под возраст и интересы ребёнка!

12 курсов на выбор: от мультиков до нейросетей
Найдем то, что зажжет именно вашего ребенка
12-17
7-11
5-6 лет
6-9 лет
Junior Minecraft
Ребенок тренирует логику и внимание, собирая объекты в знакомой игре. К концу курса он сам рассчитывает пропорции, строит многоуровневые здания и настраивает автоматические механизмы.
5-6 лет
Ребенок учится работать в базовых визуальных редакторах: собирает анимации, делает первую разработку. К концу курса он уверенно владеет компьютером, прокачивает креативность и мышление программиста
музыку
Сделает
программирования
Изучит логику
свои скины
Создаст
анимацию
пиксельную
Нарисует
Найдем то, что зажжет именно вашего ребенка
12-17
7-11
5-6 лет
7-17 лет
Математика
Ребенок тренирует логику и учится анализировать данные. К концу курса он закрывает пробелы в школьной программе и решает нестандартные задачи без зубрежки.
9-12 лет
Создание игровых миров. Ребенок программирует персонажей, ландшафты, визуальные эффекты. К концу курса придумывает полноценные игры и воплощает целые игровые вселенные.
8-12 лет
Программирование через любимую игру. Ребенок изучит координаты, циклы, условия, функции, а к концу курса уже программирует и строит сложные сооружения.
7-11 лет
Первые шаги в создании игр. Ребенок развивает логическое мышление и креативность, создаёт игры и анимации, которыми можно гордиться.
10-14 лет
Ребенок осваивает нейросети для работы с текстом, видео и звуком. К концу он сможет использовать их как личного помощника: готовить презентации, проверять факты, и решать школьные задания качественнее
7-17 лет
Ребенок научится рисовать изображения во взрослом графическом редакторе, создаст сцену для игры, придумает свою вселенную и сделает свой мерч
Найдем то, что зажжет именно вашего ребенка
12-17
7-11
5-6 лет
7-17 лет
Математика
Ребенок тренирует логику и учится анализировать данные. К концу курса он закрывает пробелы в школьной программе и решает нестандартные задачи без зубрежки.
12+
Первый настоящий язык программирования. Ребенок развивает аналитическое и креативное мышление, к концу курса создаёт веб-приложения и сайты.
7-17 лет
Ребенок научится рисовать изображения во взрослом графическом редакторе, создаст сцену для игры, придумает свою вселенную и сделает свой мерч
12+
Познакомит с азами языка программирования C# и игровым движком Unity. Результат прохождения курса – 3 полноценных игровых проекта в портфолио гейм-дизайнера.
12+
Первый настоящий язык программирования. Ребенок развивает аналитическое и креативное мышление, к концу курса создаёт веб-приложения и сайты.
12+
Научит кодить на HTML, CSS, JavaScript. В результате прохождения курса ученик создаст от 5 веб-сайтов, адаптированных под разные устройства, соберет и опубликует портфолио.
Сделайте первый шаг, чтобы раскрыть потенциал вашего ребенка
Запишитесь на бесплатный урок. На занятии мы определим интересы ребенка, создадим первый проект и дадим план развития
Нажимая на кнопку вы соглашаетесь на обработку персональных данных
© 2026
Rocket tech school LLC (USA)
401 Ryland Street, STE 200-A Reno, NV 89502 USA
IE Ivan Pavliunin
+1 (424) 208-02-11