Roblox GuidebookБаза знаний
Русский ⌄

Studio / ROBLOX

Почему персонаж не проходит маршрут: проверка Pathfinding в Studio

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

Обновлено:

Выберите один вопрос для учебной сцены #

Представим отдельный тестовый двор: слева стоит персонаж, справа находится отмеченная площадка назначения, между ними два прохода. Это придуманный пример для вашего проекта. Он не описывает уже работающего помощника в какой-либо из игр автора сайта. Первый вопрос простой: может ли выбранный персонаж добраться до площадки по открытому широкому проходу?

Запишите начальные условия до запуска: где находится старт, какой объект обозначает финиш и что считать завершением. Не добавляйте сразу награды, преследование игрока и переходы между мирами. Если базовый маршрут не удаётся объяснить, дополнительные системы только затруднят поиск причины. Сохраните учебную сцену отдельно от рабочего уровня.

Посмотрите на свободное пространство #

В Studio откройте Visualization Options в правой верхней части трёхмерного окна и включите Navigation mesh. Такая визуализация помогает увидеть пространство, которое учитывается при построении маршрутов. Сравните изображение с вашим двором: есть ли понятное соединение между стартом и целью, где проходит граница возле стены?

Для своей проверки сделайте два варианта сцены. В первом оставьте широкий проход без декораций. Во втором добавьте низкую арку. Запишите, какой вариант вы действительно проверили. Видимая область на сетке — полезная подсказка для диагностики, но итогом вашего упражнения должно быть наблюдаемое достижение финиша, а не красивый снимок редактора.

Согласуйте размеры персонажа и прохода #

Параметры агента при создании пути влияют на возможность пройти через пространство; в документации выделены радиус, высота и разрешённые действия. Для упражнения выберите одного персонажа и фиксированный набор параметров. Затем меняйте только геометрию: расширьте проход или уберите арку и сравните результат.

Не записывайте вывод «Pathfinding сломан» после одного неудачного запуска. Полезнее конкретное наблюдение: «в варианте с аркой маршрут не подтверждён, без арки подтверждён». Если одновременно заменить модель, ширину прохода и настройки, вы потеряете связь между изменением и результатом. Таблица вариантов поможет передать проблему другому разработчику.

Разделите расчёт и движение #

CreatePath создаёт объект пути, ComputeAsync выполняет расчёт между началом и концом, а результат нужно оценивать через отдельное свойство Status. Сам вызов ComputeAsync не возвращает готовую отметку «персонаж пришёл». Успешный расчёт позволяет перейти к проверке маршрута; он не завершает весь игровой сценарий.

В своём журнале заведите три отдельные строки: расчёт, продвижение по точкам, достижение цели. Допустим, расчёт подтвердился, но персонаж остался на старте. Это уже другой вопрос, чем отсутствие доступного пути. Такое разделение экономит время: вы проверяете именно тот этап, для которого есть наблюдение, и не меняете все системы сразу.

Проследите последовательность точек #

GetWaypoints позволяет получить точки рассчитанного пути. Рассматривайте их как маршрутный план. Для упражнения отметьте старт и финиш разными цветами и фиксируйте текущий этап движения. Не называйте последнюю рассчитанную точку уже посещённой, пока соответствующее действие персонажа не проверено.

Представьте результат: журнал показывает получение маршрута, затем переход к первой точке, но следующая точка остаётся недостигнутой. Запишите место остановки и снимок сцены. Это полезнее общего сообщения «он не ходит». Отдельно уточните, кто управляет движением в вашем проекте. Пример официальной страницы управляет персонажем игрока; его нельзя автоматически считать завершённой системой серверного NPC.

Добавьте препятствие перед персонажем #

Верните успешный базовый вариант двора и добавьте подвижный ящик. Сначала запишите прохождение при открытом проходе. Потом перекройте участок, который персонажу ещё предстоит пройти. Событие Path.Blocked сообщает индекс заблокированной точки; официальная документация отдельно рассматривает препятствие впереди и позади текущего положения в маршруте.

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

Учебный дворОткрыть изображение крупнее ↗
Оригинальная схема вариантов учебного двора, не снимок реальной игры.

Опишите поведение при неудаче #

Для своей игры заранее выберите понятное поведение, если путь не найден: остановка, сообщение для разработчика или ограниченная повторная попытка после изменения условий. Это решение проекта, а не готовое поведение, которое автоматически появится от одного API-вызова. Не превращайте неудачу в бесконечное непрерывное создание новых маршрутов.

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

Проверьте цель в нужном окружении #

При включённом streaming часть мира может отсутствовать на клиенте, поэтому доступ к объекту назначения требует отдельного внимания. Документация объясняет различие между полной картиной мира на сервере и видимостью объектов у клиента. Не делайте из этого универсальный совет перенести любые действия в одно место: сначала выясните, где действительно работает ваша система.

В паспорте упражнения укажите владельца логики движения и источник координат цели. Затем проверьте вариант, когда цель доступна, и отдельный вариант, когда данные для неё ещё не готовы. Не подставляйте случайный финиш ради отсутствия ошибки. Пользовательский сценарий должен объяснять, что происходит в ожидании, и не заявлять достижение недоступной цели.

Не путайте план прохода с открытием двери #

PathfindingModifier с PassThrough может позволить планировать путь через конкретное препятствие. Это не означает, что сама дверь открылась или что персонаж получил физическую возможность пройти сквозь неё. Документация использует такие приёмы в более сложных сценариях; нужное игровое действие всё равно следует реализовать и проверить.

Для первого двора оставьте дверь за пределами базового опыта. Если позже добавите её, запишите две проверки: маршрут выбирает нужную сторону, механизм двери действительно даёт пройти. Не выдавайте прохождение за подтверждённое только потому, что линия маршрута появилась за закрытым объектом. Такой принцип пригодится и для лестниц, лодок и других специальных переходов.

ВариантЧто записать
Открытый дворРасчёт, продвижение и финиш
Низкая аркаОтличие от базовой сцены
Ящик впередиРеакция на будущий участок
Ящик позадиРеакция на пройденный участок

Передайте разработчику воспроизводимый результат #

Сохраните короткую карточку: название тестовой сцены, персонаж, параметры агента, координаты начала и цели, единственное изменение в последнем опыте. Приложите наблюдения по расчёту, продвижению и финишу. Добавьте два снимка своего проекта — базовый проход и проблемный вариант. Не используйте чужую картинку как доказательство собственного теста.

Этот материал предлагает план проверки, а не готовый контроллер NPC. Мы не запускали вашу сцену в Studio и не подтверждали её работу. После реализации повторите весь маленький набор опытов, включая ящик впереди и позади. Только затем переносите решение в большой уровень, где больше персонажей, препятствий и вариантов назначения.

Результаты маршрутаОткрыть изображение крупнее ↗
Оригинальная схема трёх отдельных результатов. Не подтверждает выполнение теста.
НаблюдениеСледующая проверка
Расчёт не подтверждёнГеометрия и параметры
Маршрут есть, движения нетВладелец и этапы движения
Остановка на маршрутеТочка и изменение сцены
Цель замененаСтарый маршрут и обработчики

Первоисточники

Roblox Creator Hub — Pathfinding
Roblox Creator Hub — Path API