reckfellENGINE

Приседание: высота и выбор маршрута

Выбрать готовую карту нужной высоты и не забыть физическое тело.

На этой странице

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

Подготовить два варианта

В примере разных размеров метод ClearanceBakes.BakeLowCeiling3D(height) создаёт одинаковый пол и потолок на высоте 1,5 над средним участком. Запеките вариант с height = 2 для стоящего персонажа и height = 1 для присевшего. Для каждого результата создайте собственную карту/регион, согласуйте CellSize/CellHeight и дождитесь публикации.

В выполненной проверке цель за потолком недостижима по стоящей карте и достижима по карте приседания. Повторный запрос стоящей карты остаётся заблокированным: один запрос другой карты её не изменяет.

Выбрать маршрут по состоянию

Сохраните StanceRoutes3D.cs:

C#
using Reckfell;
using System;

public static class StanceRoutes3D
{
    public static Vector3[] Find(Rid standingMap, Rid crouchedMap,
        bool crouched, Vector3 start, Vector3 target)
    {
        Rid map = crouched ? crouchedMap : standingMap;
        if (!map.IsValid || NavigationServer3D.MapGetIterationId(map) == 0)
            return Array.Empty<Vector3>();
        return NavigationServer3D.MapGetPath(map, start, target, true);
    }
}

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

В проверке использованы старт (5, 0,25, 5) и цель (25, 0,25, 5). Вертикальная координата отражает дискретизацию построенной поверхности; это не универсальная высота для любого уровня.

Переход между состояниями

  1. Прежде чем встать, проверьте реальное свободное место для новой физической формы.
  2. Примените разрешённое игровое состояние и соответствующий коллайдер/анимацию.
  3. Выберите навигацию этого состояния и запросите маршрут снова. Старый массив пути не проверяет новый размер тела.
  4. Если используете NavigationAgent, согласуйте его карту, цель и текущее движение; после смены дождитесь серверного обновления.
  5. Если полного пути нет, оставьте персонажа в допустимом состоянии, остановитесь или выберите другую цель по правилам игры.

Не меняйте только NavigationMesh.AgentHeight после запекания: само присваивание не строит другой меш. Нужен готовый вариант или новое запекание с публикацией.

Не потерять взаимное избегание

NavigationAgent2D.SetNavigationMap назначает и карту запросов Entity, и серверную карту её агента. Это не переключатель только геометрии. Избегание рассчитывается в пределах карты; разделение персонажей по картам может лишить их ожидаемого взаимного учёта.

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

Проверены точный выбор карты и запекание высот 1/2 под потолком 1,5 в 3D, а смена карты Entity/сервера — отдельно в 2D. Изменение физической формы, тест свободного места, анимация и взаимное избегание между вариантами не проверены выполнением.

Документация Reckfell EngineНаверх ↑
БЫСТРЫЙ ПЕРЕХОДНачало работыEntity и иерархияC# & .NET 10Сцены и префабы
Руководства и полный API Reckfell K
reckfellENGINE
RECKFELL ACCOUNT

Вход в аккаунт

Войдите в аккаунт Reckfell.

Один аккаунт для всей платформы Reckfell.