Передвижение NPC

Сегодня мы с вами разберемся, как создать для нашего NPC

путь, по которому он будет передвигаться, установим для нашего персонажа поведение и рассмотрим его характеристики.

# Waypoints

1. Для начала добавим объект Part и назовем его Waypoint

Объект может быть похож на флаг или на другой объект, до

которого будет идти персонаж.

2. Теперь добавим NPC скрипт, в скрипте нужно прописать

следующее:


local Humanoid = script.Parent.Humanoid

local Path = workspace.Waypoint.Position

Humanoid:MoveTo(Path)

Humanoid.MoveToFinished:Wait()


Объяснение

local Humanoid = script.Parent.Humanoid – Путь до NPC

local Path = workspace.Waypoint.Position – Путь до Waypoint’a

Humanoid:MoveTo(Path) – В этой части мы указываем, куда

должен дойти Humanoid. В нашем случае это переменная

Path, то есть путь до Waypoint’a

Humanoid.MoveToFinished:Wait() – Это часть кода ждет, пока

персонаж завершит свой путь до первого Waypoint’a

прежде чем начать движение ко второму


Важно! Для NPC нужно отключить Anchored, иначе он

может остаться на месте.

Патрулирование окрестностей

Давайте добавим ещё несколько Waypoint’ов (2-3), чтобы наш

NPC начал патрулировать окрестности.

1. Продублируем уже готовый Waypoint и добавим в названии

цифры. Например: Waypoint1, Waypoint2 и тд.

2. Добавим в скрипт Waypoint’ы:

Посмотрим, что у нас получилось! Как мы можем заметить
наш персонаж добежал до последнего Waypoint’а и
остановился. Что же мы можем сделать чтобы персонаж
начал перемещаться по точка постоянно?

Правильно добавить цикл, давайте так и сделаем:
Теперь наш персонаж перемещается от точки до точки
бесконечно.

Подсказка: мы можем добавить Waypoint’ам Transparency и
отключить CanCollide, чтобы они не мешали и не отвлекали,
тогда перемещения персонажа будут выглядеть естественнее.
Поиск кратчайшего пути

Характеристики NPC


А теперь давайте подробнее рассмотрим объект Humanoid
нашего NPC:
Давайте рассмотрим его Properties, раздел Game.

Обратите внимание на два параметра: Health и
MaxHеalth.
Параметр Health отвечает за кол-во
здоровья в начале игры, а MaxHealth отвечает за максимально
возможное кол-во здоровья у NPC или персонажа.
WalkSpeed – скорость передвижения.
Попробуем настроить скорость передвижения NPC.

Поиск пути


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

Для этого нужно активировать следующий параметр:
Нажимаем File -> StudioSettings -> Studio -> Visualization
Поставить галочку на параметре Show Navigation Mesh

На наших объектах отобразятся вот такие стрелки

Это возможные пути для NPC, а фиолетовая поверхность – это,

поверхность по которой NPC может передвигаться.

Если на вашем пути встречаются вот такие разрывы,

попробуйте переместить объект ближе тогда стрелки пути

появятся и можно точно утверждать, что NPC сможет

правильно найти путь.

Теперь галочку Show Navigation Mesh можно отключить.

Давайте добавим скрипт и проверим


Создайте скрипт в NPC. Скрипт:

local pathfindingService = game:GetService("PathfindingService")


local humanoid = script.Parent.Humanoid

local body = script.Parent:FindFirstChild("HumanoidRootPart") or script.Parent:FindFirstChild("UpperTorso")

local destination = game.Workspace.Waypoint1.Position -- путь до точки



local path = pathfindingService:CreatePath()


path:ComputeAsync(body.Position, destination)


local waypoints = path:GetWaypoints()


for k, waypoints in pairs(waypoints) do

humanoid:MoveTo(waypoints.Position)


if waypoints.Action == Enum.PathWaypointAction.Jump then



humanoid:ChangeState(Enum.HumanoidStateType.Jumping)


end


humanoid.MoveToFinished:Wait()


end

Важно! Убедитесь что правильно настроили путь и в нем
нет разрывов.

Подсказка: Если NPC не может перепрыгнуть пропасть и падает,
настройте параметр WalkSpeed в Humanoid, это придаст NPC
ускорение и он точно допрыгнет.

Также если NPC не может запрыгнуть на уступ (слишком высоко)
перейдём в Humanoid и повысим ему высоту прыжка параметр
JumpHeight или JumpPower, зависит от версии и галочки
UseJumpPower.
Отлично теперь мы научились с вами создавать пути
передвижения для NPC, теперь мир нашей игры постепенно
оживает!