reckfellENGINE

Доступ к участкам: маски и закрытие прохода

Разделить доступ по возможностям без неверных битовых условий.

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

Для разных прав доступа к одной геометрии используйте маску запроса, а не новое запекание для каждого ключа. Размер персонажа проверяется другим механизмом: варианты зазора.

Разметить проход

В выполненном примере комнаты занимают x=0–10 и x=20–30, а промежуточный регион-проход — x=10–20; у всех диапазон y=0–10. Комнаты принадлежат публичному слою 1, проход — служебному слою 2. Геометрия соединена на одной карте.

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

C#
public static class DoorAccess
{
    public const uint Public = 1u;
    public const uint StaffDoor = 2u;
    public static uint QueryMask(bool hasDoorAccess) =>
        Public | (hasDoorAccess ? StaffDoor : 0u);
}

Назначьте проходу NavigationLayers = DoorAccess.StaffDoor, комнатам — DoorAccess.Public. Передавайте DoorAccess.QueryMask(hasDoorAccess) в параметр navigationLayers нового MapGetPath либо в NavigationAgent2D.NavigationLayers.

Проверено: маска 1 не даёт полный путь из (5, 5) в (25, 5); маска 3 допускает и комнаты, и проход. Маска 2 сама по себе недостаточна: она допускает проход, но не публичные комнаты.

Это пересечение битов, а не система условий

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

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

Закрытие и отзыв доступа

Изменение маски запроса влияет на новый поиск. Для уже полученного массива запросите новый маршрут и обработайте недостижимость. Включение/отключение региона применяется после публикации изменения карты.

Если дверь закрыта для всех, отключите её регион. В проверке после RegionSetEnabled(doorway, false) полный путь исчезает и для служебной маски. Ранее сохранённый массив при этом не меняется. Само отключение навигации также не создаёт физический коллайдер двери.

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

Диагностика

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

Проверены точный помощник, три маски, закрытие общего прохода и сохранение старого массива в 2D. Проверка игровых ключей/заданий, физическая дверь, сетевые разрешения и 3D-проходы этим набором не покрыты.

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

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

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

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