Регионы навигации: ресурс, положение и отключение
Разместить навигационную поверхность и правильно обновить маршруты.
NavigationRegion2D размещает ресурс NavigationPolygon на карте; NavigationRegion3D использует NavigationMesh. Само добавление Entity региона не создаёт проходимую поверхность: ресурс должен содержать готовые полигоны. Визуальная модель пола и физический коллайдер сами по себе не заменяют эту геометрию.
Подготовить регион
- Добавьте регион нужной размерности в уровень.
- Назначьте
NavigationPolygonилиNavigationMeshс готовыми данными. Для построения из исходной геометрии используйте запекание навигации. - Проверьте карту региона через
GetNavigationMap(), слои иEnabled. - После публикации данных запросите путь внутри поверхности; затем проверьте переход к соседнему региону.
При прямой работе с сервером порядок тот же: RegionCreate, назначение ресурса через RegionSetNavigationPolygon или RegionSetNavigationMesh, затем RegionSetMap. Созданные таким способом RID освобождает ваш код. У обычной Entity региона собственным RID управляет сама Entity; получить его можно через GetRid(), но освобождать отдельно нельзя.
Карта, положение и слои
Регион относится к одной карте. Для переноса и явного владения процедурными регионами есть законченный помощник карты.
Трансформ региона размещает его навигационные вершины в пространстве карты. В выполненной проверке перенос на (10, 0) сместил границы и разорвал соединение; возврат единичного трансформа восстановил маршрут. Масштаб по X=2 увеличил ширину серверной геометрии вдвое. Поэтому утверждение, что масштаб всегда игнорируется, для проверенного 2D-сервера неверно.
Преобразование готовой геометрии не пересчитывает запечённый зазор под персонажа. После изменения размеров исходного уровня пересмотрите параметры и выполните запекание заново. Обновление трансформа навигации также не переносит физическое тело пассажира движущейся платформы: движение и привязка остаются задачей игры.
NavigationLayers — маска доступности региона для запроса, а не слои физики. Правила масок и нумерации приведены в навигационных слоях.
Отключение и старые маршруты
RegionSetEnabled(region, false) или Enabled = false исключает регион из новых поисков после обновления карты. Уже полученный массив пути остаётся прежним. В проверке старый массив по-прежнему заканчивался в отключённом регионе, а новый поиск полного пути уже не находил.
После отключения двери, платформы или участка уровня решите, какие персонажи должны пересчитать маршрут. Само изменение региона не останавливает уже начатое движение и не переписывает сохранённые массивы точек.
Диагностика
- Регион есть, пути нет: проверьте число полигонов ресурса, карту, слои и публикацию данных.
- Внутри региона путь есть, между регионами нет: проверьте соединение границ.
- После отключения персонаж идёт по старому маршруту: запросите новый путь и обработайте недостижимость.
- Геометрия сместилась: различайте локальные вершины ресурса и трансформ региона.
Проверены серверные изменения 2D: отключение/включение, сохранение старого массива, перенос, масштаб и восстановление соединения. 3D проверен с запечённым ресурсом. Размещение мышью, физика платформ и масштаб 3D не проверены этим набором.