Как сделать умного NPC в Roblox Studio
Вставка
- Опубліковано 28 чер 2024
- 📍 Этот гайд расскажет вам как сделать умного NPC в Roblox Studio, используя модуль (плагин) Simple path. Этот модуль упрощает взаимодействие с Pathfinding Service, оптимизируя и упрощая его использование .
📍 В этом видео показаны самые основные команды и самое поверхностное использование этого модуля. Если вы захотите более подробный гайд, то я сделаю вторую часть, где разберу всё от А до Я!
🔵 Ссылка на документацию модуля: grayzcale.github.io/simplepat...
🔵 Ссылка на установку модуля: create.roblox.com/store/asset...
🔵 Ссылка на все параметры поиска пути: devforum.roblox.com/t/what-do...
Временные метки:
0:00 Вступление
0:06 Некоторые объяснения
0:34 Добавление модуля
1:05 Подготовка рига
1:36 Пишем скрипт
3:08 Что такое RBX Script Signal
3:50 RBX Script Signal из модуля
4:27 Настройка поиска пути
5:28 Пока! - Навчання та стиль
Посмотрите моё новое видео на основном канале!
ua-cam.com/video/ZqRLhHQK5hw/v-deo.html&lc=UgxHFHU-ikxCSrciGQ14AaABAg
Круто, по делу и без воды. Побольше бы таких туториалов на ютубе
@royday2302 верно подмечено
Круто! Надеюсь увидеть больше туториалов по рб студио на этом канале
Спасибо большое, очень информативно и по делу!
Круто, продолжай в том же духе!
спасибо!! жду больше видео по роблокс студио ты очень хорошо и информативно делаешь видео !!
и вправду шикарное видео, смотрел много разных уроков и в целом везде плохо рассказано и шаблонно, а тут приятно и понятно, да и тема новая, спасибо за ролик
Такое я ещё не видел на русском ютубе и это действительно круто. Если в двух словах это видео ПРОСТО ИМБА, продолжай в том же духе!
Давно думал как сделать НПС для игры. Спасибо вам большое!
Круто, объяснил кратко, хорошо и без воды
не плохо, спасибо
Спасибо, наконец-то нашел Ютуб канал который нормально объясняет
самое годное что я видел
Как круто, что твое видео попалось мне в рекомендации! Наконец-то я смогу сделать NPC лучше, не мучаясь с этим громоздким PathFinding'ом роблокса!
Квемон спасибо помню тебя ещё с проекта со слаймом!
Спасибо. Было бы неплохо увидеть подробный гайд.
Думать за кого-то не собираюсь. Я даю частички пазла, а картинку, собирай сам. Это более эффективный способ учится новому. Я подумываю сделать гайд по базовым командам в LUA
Либо ты противоречишь себе, либо неправильно понял. Я написал комментарий с просьбой увидеть, цитирую твои слова: «вторую часть, где разберу всё от А до Я!»@@SvalkaKvemona
Я под "разберу всё от а до я" имел в виду что покажу все-все функции модуля. Я возможно твою просьбу не так понял тоже@@krimdoff5956
Хоть я не пользуюсь роблокс студио, но этот гайд очень очень крутой и полезный!
Подача ахуенная, монтаж тоже, а сразу подписываюсь)
уааааааааа прикольна
Если бы много таких туториалов было,цены бы небыло
Я уже делаю один по модульным скриптам
а можешь сделать видео где более подробно описано как сделать так чтобы нпс ходил за игроком
Человек бензопила 8 бит?
Я вижу вы ценитель высокой культуры)
А где можно найти эту желтую штуку когда ты выделяешь модель?
Привет , незнаешь как начать вообще создавать что то в роблокс студио? Какие лучше программы для этого изучать?. Я пытался просто гайды смотреть , но видимо плохие так как было как то всё намешанно и уже на 7 гайде не работали некоторые вещи. Просто у меня желание рпгшку с системой крафта и кгмбинаций зелий есть. Рисовать могу классно только и все ...
Пфф... Ну, для начала, стоит сделать что-то простое. Для создания игр в РБС, тебе потребуется только сам РБС
Сделать твою идею получится только с очень большим опытом
Ничего конкретного подсказать не могу, всё индивидуально. Я учился по ходу дела
@@SvalkaKvemona понятно , я тоже думаю сначала сделать какой нит простой симулятор тайкон , может даже робуксов с него получу
А как сделать чтоб риг шёл на игрока?
Здраствуйте, вы случано не знаете как сделать так что бы нпс не нападал на человека который его заспавнил, или не нападал на ближайшего игрока, а на того что 2 по расстоянию от нпс?
Берешь массив потенциальный целей, сортируешь, и выбираешь второго в массиве. Что-то типа massiv[ 2 ]
сделай видео как сделать анимацию для tool когда он у тебя в руке
Я сделаю тогда видео как просто проигрывать анимации. Никто за тебя код писать не будет)
Дай человеку рыбу - будет сыт день.
Научи человека рыбачить - будет сыт всегда
какой язык изучать что бы создавать игры в роблокс студио? (я никогда до этого ничего не изучал и понятия не имею что происходит в ролике) подскажите
В роблокс студио используется язык программирования Lua
А еще, этот урок не сделан и не направлен на полных новичков
можно название песни на фоне? прост кажется очень знакомым
Chainsaw Man Opening - Kick Back [8 Bit; VRC6]: ua-cam.com/video/mgmfkIAXHjg/v-deo.html
И
CHIPTUNE ♫ 20XX : ua-cam.com/video/kZRQosq3PjM/v-deo.html
Запарился, добавил звуки клавиатуры при печати строк
Кста имба видео, буквально недавно пытался сделать NPС вечно ходящий с игроком, но было куча ситуация когда бот просто становился на месте, не работал как хотел, посмотрю решит ли этот модуль проблему, а то я в своём скрипте как только не пытался решить проблему
Я протестил, есть проблема что он плох в паркуре, если расстояние не маленькое, то он не прыгает, хотя что бы туда допрыгнуть не нужно прыгать от края до края, так же с высотой, куда игрок может допрыгнуть, NPS не может
Да, на счёт звуков клавы запарился) А поиск пути нужно очень долго настраивать, что-бы НПС не вёл себя как придурок@@Vovan_tvvp
Привет, на самом деле штука прикольная. Вроде-бы легкая. Но у меня есть вопрос как сделать так чтобы он за HumanoidRootPart'ом игрока ходил? Или там незнаю нужно с сервера передавать с клиента короче да.
Самое простое, создать функцию, которая будет перебирать через цикл for всех игроков, и проверять кто в радиусе. Если игрок в радиусе, то выбрать его как цель. Уверен что есть способы лучше, но это самое первое и простое что пришло в голову
А именно for i, v in pairs бла бла или for i = 10,10,10?@@SvalkaKvemona
Первое. Нужно просто узнать дистанцию, и если игрок достаточно близко, то указать HumanoidRootPart как цель@@jopoy.
Понял, а как в скрипте написать путь до humanoid root part? то просто если я не ошибаюсь только можно через клиент@@SvalkaKvemona
Не, берешь игроков, Players:GetPlayers(), или что-то типа того. И потом перебираешь каждого, и пишешь типа v.Character.HumanoidRootPart.Position@@jopoy.
Хоть мне это не надо. Но зато нету ничего лишнего и все сказал всечто надо.
0:38, интересно, как сделать так чтобы нпс шёл на игрока
Тут уже комплексный гайд нужен. В целом, этот урок рассчитан на тех, кто уже хоть что-то умеет.
Rig не идёт до цели
Уже полчаса пересматриваю ничего не вижу странного
Что за плагин для билдинга ты используешь?
Какой?
Квэмон, порекомендуй как начать скриптить, т.к я раньше пытался, но ничего не получалось :( Также предлагаю сотрудничать, я могу делать превью, и т.п.
Я сначала решил сделать тестовый проект по типу Steps steps, так как это было бы просто. Сначала было сложно вникнуть, но сейчас, я уже без проблем занимаюсь скриптингом. Я решал проблемы по мере поступления
Забавно, но луа очень похоже на js
Не совсем
не бро, ты ошибаешься
С середины где-то с 3:00 и до конца была игра про зомбаков, есть название карты?
Нету, она не закончена
@@SvalkaKvemona доделай, выглядит неплохо
@@SvalkaKvemonaподскажите, почему у нпс при ходьбе нет анимации? (внутри нпс есть скрипт animate)
@@KllKlok Потому-что это делается отдельно. Скрипт animate не работает просто так.
Квэмон.. Квэмон, где то я это слышал.. Это случайно не твой второй канал?
Да, он самый)
а как сделать так чтоб этот нпс ходил за игроком(игроками)?
А вот думай сам :)
В видео было только про сам поиск пути. Я не буду давать рыбу, я дам удочку (метафора)
привтее
а как написать скрипт на НПС который ходит за тобой?
А вот сам думай. Это видео не для новичков сделано, а для уже хоть что-то понимающих. Программирование это пазл. Попробуй его собрать. Для начала придумай как это бы происходило.
Допустим, каждые 5 секунд, скрипт бы собирал всех игроков на карте, считал дистанцию между игроком и врагом, а потом через отсортированный список отбирал бы самого первого. Попробуй по отдельности разобрать все эти шаги, и у тебя выйдет
@@SvalkaKvemona а как указать путь до HumanoidRootPart?
как сделать парт цель
Просто назови его Target
А что делать если написал скрипт как на видео но нпс не идёт?
Дай скрипт, просто извини, но мысли читать не умею)
@@SvalkaKvemona local SimplePath = require(game:GetService("ServerStorage").SimplePath)
local Rig = script.Parent
local Target = workspace.Target
local path = SimplePath.new(Rig)
path:Run(Target)
значит написал скрипт не как на видео 😥
как добавить анимацию бега?
сам думай, тутора по этому поводу не будет
можешь опубликовать твоих зомби пожалуйста
100 робуксов
3:10 чо за игра на фоне
The Undead Coming: Armageddon
Это не свалка квэмона это дворец квэмона
как сделать чтобы он шёл за игроком?
написать функцию которая каждую секунду ищет ближайшего игрока
слушай товарищ, я испробовал этот модуль. и на данный момент он перестал работать. Run() по какой то причине не движет нпс до нужной точки. и стоит на одном месте. какие эти проблемы могут быть?
Скинь скрипт
@@SvalkaKvemona local ServerStorage = game:GetService("ServerStorage")
local SP = require(ServerStorage.SimplePath)
local rig = script.Parent
local walk = rig.WalkingAround
walk.Enabled = false
function FindPlayer(Position)
local List = game.Workspace:GetChildren()
local Torso = nil
local Distance = 40
local HumanoidRootPart = nil
local Humanoid = nil
local Player = nil
for i = 1, #List do
Player = List[i]
if (Player.ClassName == "Model") and (Player ~= script.Parent) then
HumanoidRootPart = Player:FindFirstChild("HumanoidRootPart")
Humanoid = Player:FindFirstChild("Humanoid")
if (HumanoidRootPart ~= nil) and (Humanoid ~=nil) and (Humanoid.Health > 0) then
if (HumanoidRootPart.Position - Position).Magnitude < Distance then
Torso = HumanoidRootPart
Distance = (HumanoidRootPart.Position - Position).Magnitude
end
end
end
end
return Torso
end
local path = SP.new(rig)
while true do
task.wait(0.1)
local Target = FindPlayer(script.Parent.HumanoidRootPart.Position)
if Target ~= nil then
walk.Enabled = false
task.wait(0.1)
path:Run(Target)
elseif walk.Enabled ~= true then
task.wait(1)
walk.Enabled = true
end
end
у меня всё работало но после того как я переместил модельку, скрипт перестал работать
@@SvalkaKvemona local ServerStorage = game:GetService("ServerStorage")
local SP = require(ServerStorage.SimplePath)
local rig = script.Parent
local walk = rig.WalkingAround
walk.Enabled = false
function FindPlayer(Position)
local List = game.Workspace:GetChildren()
local Torso = nil
local Distance = 40
local HumanoidRootPart = nil
local Humanoid = nil
local Player = nil
for i = 1, #List do
Player = List[i]
if (Player.ClassName == "Model") and (Player ~= script.Parent) then
HumanoidRootPart = Player:FindFirstChild("HumanoidRootPart")
Humanoid = Player:FindFirstChild("Humanoid")
if (HumanoidRootPart ~= nil) and (Humanoid ~=nil) and (Humanoid.Health > 0) then
if (HumanoidRootPart.Position - Position).Magnitude < Distance then
Torso = HumanoidRootPart
Distance = (HumanoidRootPart.Position - Position).Magnitude
end
end
end
end
return Torso
end
local path = SP.new(rig)
while true do
task.wait(0.1)
local Target = FindPlayer(script.Parent.HumanoidRootPart.Position)
if Target ~= nil then
walk.Enabled = false
task.wait(0.1)
path:Run(Target)
elseif walk.Enabled ~= true then
task.wait(1)
walk.Enabled = true
end
end
код полностью функционировал но когда я его переместил он перестал работать
@@SvalkaKvemona куда кидать, в ютубе они что то не отправляются
@@SvalkaKvemona local ServerStorage = game:GetService("ServerStorage")
local SP = require(ServerStorage.SimplePath)
local rig = script.Parent
local path = SP.new(rig)
local waypoints = workspace.Cutscene.Position
while true do
--local rndNum = math.random(1,#waypoints)
path:Run(waypoints)
task.wait(5)
end
у меня код по длиннее, но даже этот работать не хочет
Моему ваще по барабану он стоит на том месте где стоял и не пошевелился
1. Ты установил модуль в проект?
2. Ты засунул скрипт в твоего персонажа?
3. Ты точно правильно написал скрипт? Можешь его скинуть?
я не понял как сделать анимацию
Этот урок не об этом. Учи сам
Ребят, что делать, если риг просто по всей карте начинает летать?😢
А какой код?
@@SvalkaKvemonaЯ исправил, но так и не понял кое что. В общем, когда риг из ServerStorage переноситься в Workspace и позиция HumanoidRootPart меняется, то у частей тела отключается коллизия, а если её вручную включить, то персонаж начинает все равно летать, но повыше...
В общем, в итоге просто убрал строчку «Rig.HumanoidRootPart.Position = StartPos.Position”
Я уже малясь не вовремя, но, да. То что ты написал, не работало бы. Ты менял позицию не самого персонажа, а одной его части. Это так не работает. Тебе нужно перемещать группу с персонажем через метод Character:Move() или что-то типа того. Попробуй сам
я раз 20 попробовал не идет
1. Ты скачал модуль?
2. Ты в правильное место засунул модуль?
3. Ты правильно написал скрипт?
4. Ты правильно указал цель?
5. Ты создал вообще объект цели?
6. Скинь скрипт
это конечно круто, но есть проблема, У НАПС НЕ РАБОТАЕТ АНИМАЦИЯ ХОТЬБЫ! а всё потому что инпеси не ходит, а двигается
Напиши код для проигрывания анимации, сам
Привет, я знаю как решить проблему! Возьми риг СВОЕГО персонажа, там должен быть локальный скрипт «Animate», тебе нужно скопировать код, создать в НПС который будет ходить скрипт (не локальный) и вставить код
@@SvalkaKvemonaспасибо, я уже сам догадался, ток у меня после анимации произошла новая ошибка, нпс перестал ходить.
@@KllKlokне работает, я просто решил создать свой скрипт.
У меня не получается
Посмотри видео от начала и до конца очень внимательно. Разбери работу скрипта логически.
@@SvalkaKvemona я пробавал 10 раз не роботает local sp = require(game:GetService("ServerStorage").SimplePath)
local rig = script.Parent
local target = game.Workspace.tar
local path = sp.new(rig)
path:Run(target)
скрипт
я сделал как на видео но почему нпс не двигается у меня?
Вот несколько вопросов которые помогут исправить твою проблему:
1. Ты импортировал модуль в скрипт и в проект?
2. Ты засунул скрипт в RIG?
3. Ты указал цель для RIG-а?
И в конце концов, покажи скрипт
я просто по видео закинул модуль в ServerStorage и в Rig писал весь этот скрипт@@SvalkaKvemona
я только недавно начал кодить и пытаюсь для игры сделать монстра который будет идти на челов и бить их@@SvalkaKvemona
А Part цель сделал? Создай куб в мире с названием "Target"@@coffencoffen36
ОООООО ДАА СРАБОТАЛО я просто ошибку сделал в названии
СПАСИБО!!@@SvalkaKvemona
Как сделать парт цель😂
создай парт и переименуй его в Target
Почему не работает?
Ты очень внимательно видео смотрел?
@@SvalkaKvemona дя
@@ноунаме Проверь есть ли у тебя в проекте парт с названием Target.
В тупую переписывать код не сработает, нужно хоть немножко втыкать
Как юе я не люблю скрипты я в это не понимаю!
ну, может для начала было бы не плохо посмотреть азы? Это видео не рассчитано на полных новичков, скорее быстрое объяснение работы модуля
Без труда нечего не выйдет не можешь выделить время = не можешь делать игру
@@SvalkaKvemona
@@Lyevsahyaможет потому что надо внимательно слушать
Посмотрел первые 30 секунд, 'мы не будем использовать pathfinding ибо там дохуя ненужных вычислений от чего он очень медленный, вместо этого мы будем использовать модуль который использует pathfinding. Бро гений? Какое блять преимущество в оптимизации ты получаешь используя модуль который просто выступает в роли wrapper'a(обертки, с функциями для использования pathfinding'a) ?
-
Ты сделал акцент на том что pathfinding медленный из-за своих вычислений, и поэтому не будешь его использовать, но по итогу ты все равно его используешь?
genius
Я про это узнал только после того как смонтировал видео, если честно. Однако, я пробовал заскриптить зомби на обычном Pathfinding, и у меня обновление пути было очень долгим, в тоже время, при использовании SimplePath, поиск пути происходил моментально, и позволял спавнить до сотни зомби без потерь кадров, или увеличения пинга. Пусть SimplePath и просто "обёртка", но факт есть факт, что работает намного быстрее.
@@SvalkaKvemona факт заключается в том что модуль работает быстрее чем твой код, но не быстрее pathfinding'a т.к. использует его 😭
Из API к модулю:
Этот модуль работает, используя «повторяющийся» подход к поиску пути. Агент поиска пути перемещает более эффективный путь при многократном вычислении, а не только один раз. Частично причина в том, что вычисление пути один раз не гарантирует, что агент достигнет цели, как ожидалось. При использовании повторяющегося подхода учитываются любые препятствия или препятствия, блокирующие путь в текущий момент. Это гарантирует, что агент достигнет своей цели несмотря ни на что, пока он доступен в пределах PathfindingService. @@pestik.
local path = SimplePath.new(Rig) в этой строчке скрипта ругаеться на SimplePath что делать?
Потому-что ты не обозначил что такое SimplePath, или Rig в скрипте через переменную. Тебе нужно импортировать модуль сначала. Посмотри видео внимательнее, от начала, до конца
ок@@SvalkaKvemona