reckfellENGINE

OpenXRActionMap

Сохранённая структура наборов действий и профилей OpenXR.

На этой странице
class OpenXRActionMapReckfellSharpНаследует Resource

OpenXRActionMap хранит ресурсы наборов и профилей, а не текущие значения контроллеров. Новый экземпляр пуст. Для запуска нужна карта по пути xr/openxr/default_action_map; создание или сохранение другой карты не перестраивает подключённый XR-сеанс.

Полный проверенный помощник создаёт gameplay/select и две привязки Simple Controller, затем умеет сохранить .rdata. Он не включает XR и не имитирует контроллер:

C#
using Reckfell;

public static class SelectionActionMap
{
    // Caller owns the map. This builds resources; it does not start an XR session.
    public static OpenXRActionMap Create()
    {
        var map = new OpenXRActionMap();
        using var set = new OpenXRActionSet
        {
            ResourceName = "gameplay", LocalizedName = "Gameplay", Priority = 0
        };
        using var select = new OpenXRAction
        {
            ResourceName = "select", LocalizedName = "Select",
            ActionType = OpenXRAction.ActionTypeEnum.Bool,
            ToplevelPaths = ["/user/hand/left", "/user/hand/right"]
        };
        set.AddAction(select);
        map.AddActionSet(set);

        using var profile = new OpenXRInteractionProfile
        {
            InteractionProfilePath = "/interaction_profiles/khr/simple_controller"
        };
        using var left = new OpenXRIPBinding
        {
            Action = select, BindingPath = "/user/hand/left/input/select/click"
        };
        using var right = new OpenXRIPBinding
        {
            Action = select, BindingPath = "/user/hand/right/input/select/click"
        };
        using var bindings = new Reckfell.Collections.Array { left, right };
        profile.Bindings = bindings;
        map.AddInteractionProfile(profile);
        return map;
    }

    public static Error Save(string path = "asset://openxr_action_map.rdata")
    {
        using var map = Create();
        return ResourceSaver.Save(map, path);
    }
}

ActionSets и InteractionProfiles возвращают общие Array. Самоприсваивание такого списка очищает его, поскольку setter сначала очищает текущий контейнер. Для замены сначала создавайте Duplicate() контейнера. GetActionSets().Clear() также меняет карту, причём без Changed. Для обычного редактирования предпочтительны Add/Remove методы. SetActionSets сам не испускает Changed. Копия контейнера не копирует ресурсы внутри.

AddActionSet устраняет повтор одного ресурса, но не разных ресурсов с одинаковым именем. FindActionSet ищет ResourceName; FindInteractionProfile — полный путь профиля. Профиль может принадлежать только одной карте и при добавлении в другую переносится. CreateDefaultActionSets добавляет данные, не сбрасывает карту: повторный вызов создаёт ещё один reckfell-набор.

Проверены структура, события, массивы, перенос профилей, стандартная карта и сохранение с независимой загрузкой в установленном Windows runtime. OpenXR оставался выключенным: ввод, принятие профилей гарнитурой, haptics и XR-сеанс не проверялись. Пошаговое подключение описано в руководстве по карте действий.

Объявления сверены с C# SDK 1.0.0. Раскройте имя, чтобы увидеть сигнатуры и описание.

Конструкторы1

OpenXRActionMapКонструктор
# OpenXRActionMap
C#
public OpenXRActionMap();

Создаёт пустую карту без наборов и профилей. Не создаёт стандартные действия, XR-сеанс или файл автоматически.

Свойства2

ActionSetsСвойство
# ActionSets
C#
public Reckfell.Collections.Array ActionSets { get; set; }

Список ресурсов наборов. Getter возвращает общий Array, не независимую копию: Clear() меняет карту без Changed. Setter сначала очищает текущий список, затем добавляет валидные наборы без повторов одного ресурса; Changed не испускается, уникальность ResourceName не проверяется. Самоприсваивание полученного массива очищает список. Для замены сначала создайте Duplicate() контейнера; для обычных изменений используйте AddActionSet/RemoveActionSet.

InteractionProfilesСвойство
# InteractionProfiles
C#
public Reckfell.Collections.Array InteractionProfiles { get; set; }

Список ресурсов профилей. Getter возвращает общий Array. Setter очищает прежние связи, затем добавляет профили через AddInteractionProfile; возможны несколько Changed. Самоприсваивание общего массива очищает список: для замены используйте отдельный контейнер, например Duplicate(). Профиль принадлежит одной карте; перенос удаляет его из прежней. Это ресурсы привязок, не перечень подключённых контроллеров.

Методы15

AddActionSetvoid
# AddActionSet
C#
public void AddActionSet(OpenXRActionSet actionSet);

Добавляет существующий ненулевой ресурс набора и испускает Changed. Повтор того же ресурса игнорируется без сигнала. Два разных ресурса с одинаковым ResourceName не считаются одним набором; проверяйте уникальность имён отдельно. Один ресурс набора может храниться в нескольких картах.

Параметры
ИмяТипПо умолчанию
actionSetOpenXRActionSet—
actionSet

Существующий ненулевой ресурс набора; операции используют идентичность ресурса, а не совпадение имени.

AddInteractionProfilevoid
# AddInteractionProfile
C#
public void AddInteractionProfile(OpenXRInteractionProfile interactionProfile);

Добавляет ненулевой профиль и испускает Changed. Повтор того же ресурса ничего не делает. Если профиль принадлежал другой карте, он удаляется из неё и переходит в эту. Это подготовка данных, не регистрация нового профиля в уже запущенном runtime.

Параметры
ИмяТипПо умолчанию
interactionProfileOpenXRInteractionProfile—
interactionProfile

Существующий ненулевой ресурс профиля; при добавлении может перейти из прежней карты.

CreateDefaultActionSetsvoid
# CreateDefaultActionSets
C#
public void CreateDefaultActionSets();

Добавляет стандартный набор reckfell и стандартные профили/действия. Не очищает карту: повторный вызов создаёт ещё один набор с тем же именем. Вызывайте на новой пустой карте; не используйте как reset. Не сохраняет файл и не подключает наборы к XR-сеансу.

FindActionSetOpenXRActionSet
# FindActionSet
C#
public OpenXRActionSet FindActionSet(string name);

Возвращает первый набор с точным ResourceName либо null. Поиск регистрозависимый; LocalizedName не используется. Проверяйте результат перед обращением к набору.

Параметры
ИмяТипПо умолчанию
namestring—
name

Точный ResourceName искомого набора; не LocalizedName.

Возвращает OpenXRActionSet

Первый набор с точным ResourceName или null.

FindInteractionProfileOpenXRInteractionProfile
# FindInteractionProfile
C#
public OpenXRInteractionProfile FindInteractionProfile(string name);

Возвращает первый профиль с точным InteractionProfilePath либо null. Несмотря на имя параметра name, требуется полный путь профиля, а не ResourceName или подпись.

Параметры
ИмяТипПо умолчанию
namestring—
name

Полный InteractionProfilePath, например /interaction_profiles/khr/simple_controller.

Возвращает OpenXRInteractionProfile

Первый профиль с точным InteractionProfilePath или null.

GetActionSetOpenXRActionSet
# GetActionSet
C#
public OpenXRActionSet GetActionSet(int idx);

Читает существующий ресурс набора по индексу 0…GetActionSetCount()-1. Это ссылка на тот же ресурс; изменения его свойств видны другим пользователям. Проверяйте диапазон до вызова.

Параметры
ИмяТипПо умолчанию
idxint—
idx

Индекс от 0 включительно до соответствующего Count исключительно. Проверьте количество до вызова.

Возвращает OpenXRActionSet

Существующий ресурс набора по допустимому индексу; не копия.

GetActionSetCountint
# GetActionSetCount
C#
public int GetActionSetCount();

Число ресурсов наборов в этой карте. Не число активных наборов или наборов подключённого XR-сеанса.

Возвращает int

Число наборов ресурса карты, изначально 0.

GetActionSetsReckfell.Collections.Array
# GetActionSets
C#
public Reckfell.Collections.Array GetActionSets();

Список ресурсов наборов. Getter возвращает общий Array, не независимую копию: Clear() меняет карту без Changed. Setter сначала очищает текущий список, затем добавляет валидные наборы без повторов одного ресурса; Changed не испускается, уникальность ResourceName не проверяется. Самоприсваивание полученного массива очищает список. Для замены сначала создайте Duplicate() контейнера; для обычных изменений используйте AddActionSet/RemoveActionSet.

Возвращает Reckfell.Collections.Array

Общий Array карты; не очищайте и не присваивайте его обратно без отдельной копии контейнера.

GetInteractionProfileOpenXRInteractionProfile
# GetInteractionProfile
C#
public OpenXRInteractionProfile GetInteractionProfile(int idx);

Читает ресурс профиля по индексу 0…GetInteractionProfileCount()-1. Возвращает тот же ресурс, не независимую копию; сначала проверьте диапазон.

Параметры
ИмяТипПо умолчанию
idxint—
idx

Индекс от 0 включительно до соответствующего Count исключительно. Проверьте количество до вызова.

Возвращает OpenXRInteractionProfile

Существующий ресурс профиля по допустимому индексу; не копия.

GetInteractionProfileCountint
# GetInteractionProfileCount
C#
public int GetInteractionProfileCount();

Число профилей в ресурсе карты. Не количество контроллеров, гарнитур или профилей, поддержанных подключённым runtime.

Возвращает int

Число ресурсов профилей, изначально 0.

GetInteractionProfilesReckfell.Collections.Array
# GetInteractionProfiles
C#
public Reckfell.Collections.Array GetInteractionProfiles();

Список ресурсов профилей. Getter возвращает общий Array. Setter очищает прежние связи, затем добавляет профили через AddInteractionProfile; возможны несколько Changed. Самоприсваивание общего массива очищает список: для замены используйте отдельный контейнер, например Duplicate(). Профиль принадлежит одной карте; перенос удаляет его из прежней. Это ресурсы привязок, не перечень подключённых контроллеров.

Возвращает Reckfell.Collections.Array

Общий Array профилей; изменение контейнера напрямую меняет ресурс карты.

RemoveActionSetvoid
# RemoveActionSet
C#
public void RemoveActionSet(OpenXRActionSet actionSet);

Удаляет переданный ресурс из этой карты, если он есть, и испускает Changed. Не ищет по имени, не уничтожает внешние ссылки и не отключает уже подключённый runtime-набор.

Параметры
ИмяТипПо умолчанию
actionSetOpenXRActionSet—
actionSet

Существующий ненулевой ресурс набора; операции используют идентичность ресурса, а не совпадение имени.

RemoveInteractionProfilevoid
# RemoveInteractionProfile
C#
public void RemoveInteractionProfile(OpenXRInteractionProfile interactionProfile);

Удаляет существующий ресурс профиля из этой карты, сбрасывает его связь с картой и испускает Changed. При отсутствии ресурса ничего не меняется. Привязки уже подключённого сеанса не перестраиваются.

Параметры
ИмяТипПо умолчанию
interactionProfileOpenXRInteractionProfile—
interactionProfile

Существующий ненулевой ресурс профиля; при добавлении может перейти из прежней карты.

SetActionSetsvoid
# SetActionSets
C#
public void SetActionSets(Reckfell.Collections.Array actionSets);

Список ресурсов наборов. Getter возвращает общий Array, не независимую копию: Clear() меняет карту без Changed. Setter сначала очищает текущий список, затем добавляет валидные наборы без повторов одного ресурса; Changed не испускается, уникальность ResourceName не проверяется. Самоприсваивание полученного массива очищает список. Для замены сначала создайте Duplicate() контейнера; для обычных изменений используйте AddActionSet/RemoveActionSet.

Параметры
ИмяТипПо умолчанию
actionSetsReckfell.Collections.Array—
actionSets

Отдельный Array ресурсов OpenXRActionSet. Если исходите из getter этой карты, сначала вызовите Duplicate() контейнера; самоприсваивание потеряет список.

SetInteractionProfilesvoid
# SetInteractionProfiles
C#
public void SetInteractionProfiles(Reckfell.Collections.Array interactionProfiles);

Список ресурсов профилей. Getter возвращает общий Array. Setter очищает прежние связи, затем добавляет профили через AddInteractionProfile; возможны несколько Changed. Самоприсваивание общего массива очищает список: для замены используйте отдельный контейнер, например Duplicate(). Профиль принадлежит одной карте; перенос удаляет его из прежней. Это ресурсы привязок, не перечень подключённых контроллеров.

Параметры
ИмяТипПо умолчанию
interactionProfilesReckfell.Collections.Array—
interactionProfiles

Отдельный Array ненулевых OpenXRInteractionProfile. Не передавайте общий getter-массив этой же карты без Duplicate().

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

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

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

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