OpenXRActionMap
Сохранённая структура наборов действий и профилей OpenXR.
OpenXRActionMap хранит ресурсы наборов и профилей, а не текущие значения контроллеров. Новый экземпляр пуст. Для запуска нужна карта по пути xr/openxr/default_action_map; создание или сохранение другой карты не перестраивает подключённый XR-сеанс.
Полный проверенный помощник создаёт gameplay/select и две привязки Simple Controller, затем умеет сохранить .rdata. Он не включает XR и не имитирует контроллер:
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Конструктор
public OpenXRActionMap();Создаёт пустую карту без наборов и профилей. Не создаёт стандартные действия, XR-сеанс или файл автоматически.
Свойства2
ActionSetsСвойство
public Reckfell.Collections.Array ActionSets { get; set; }Список ресурсов наборов. Getter возвращает общий Array, не независимую копию: Clear() меняет карту без Changed. Setter сначала очищает текущий список, затем добавляет валидные наборы без повторов одного ресурса; Changed не испускается, уникальность ResourceName не проверяется. Самоприсваивание полученного массива очищает список. Для замены сначала создайте Duplicate() контейнера; для обычных изменений используйте AddActionSet/RemoveActionSet.
InteractionProfilesСвойство
public Reckfell.Collections.Array InteractionProfiles { get; set; }Список ресурсов профилей. Getter возвращает общий Array. Setter очищает прежние связи, затем добавляет профили через AddInteractionProfile; возможны несколько Changed. Самоприсваивание общего массива очищает список: для замены используйте отдельный контейнер, например Duplicate(). Профиль принадлежит одной карте; перенос удаляет его из прежней. Это ресурсы привязок, не перечень подключённых контроллеров.
Методы15
AddActionSetvoid
public void AddActionSet(OpenXRActionSet actionSet);Добавляет существующий ненулевой ресурс набора и испускает Changed. Повтор того же ресурса игнорируется без сигнала. Два разных ресурса с одинаковым ResourceName не считаются одним набором; проверяйте уникальность имён отдельно. Один ресурс набора может храниться в нескольких картах.
| Имя | Тип | По умолчанию |
|---|---|---|
actionSet | OpenXRActionSet | — |
actionSetСуществующий ненулевой ресурс набора; операции используют идентичность ресурса, а не совпадение имени.
AddInteractionProfilevoid
public void AddInteractionProfile(OpenXRInteractionProfile interactionProfile);Добавляет ненулевой профиль и испускает Changed. Повтор того же ресурса ничего не делает. Если профиль принадлежал другой карте, он удаляется из неё и переходит в эту. Это подготовка данных, не регистрация нового профиля в уже запущенном runtime.
| Имя | Тип | По умолчанию |
|---|---|---|
interactionProfile | OpenXRInteractionProfile | — |
interactionProfileСуществующий ненулевой ресурс профиля; при добавлении может перейти из прежней карты.
CreateDefaultActionSetsvoid
public void CreateDefaultActionSets();Добавляет стандартный набор reckfell и стандартные профили/действия. Не очищает карту: повторный вызов создаёт ещё один набор с тем же именем. Вызывайте на новой пустой карте; не используйте как reset. Не сохраняет файл и не подключает наборы к XR-сеансу.
FindActionSetOpenXRActionSet
public OpenXRActionSet FindActionSet(string name);Возвращает первый набор с точным ResourceName либо null. Поиск регистрозависимый; LocalizedName не используется. Проверяйте результат перед обращением к набору.
| Имя | Тип | По умолчанию |
|---|---|---|
name | string | — |
nameТочный ResourceName искомого набора; не LocalizedName.
OpenXRActionSetПервый набор с точным ResourceName или null.
FindInteractionProfileOpenXRInteractionProfile
public OpenXRInteractionProfile FindInteractionProfile(string name);Возвращает первый профиль с точным InteractionProfilePath либо null. Несмотря на имя параметра name, требуется полный путь профиля, а не ResourceName или подпись.
| Имя | Тип | По умолчанию |
|---|---|---|
name | string | — |
nameПолный InteractionProfilePath, например /interaction_profiles/khr/simple_controller.
OpenXRInteractionProfileПервый профиль с точным InteractionProfilePath или null.
GetActionSetOpenXRActionSet
public OpenXRActionSet GetActionSet(int idx);Читает существующий ресурс набора по индексу 0…GetActionSetCount()-1. Это ссылка на тот же ресурс; изменения его свойств видны другим пользователям. Проверяйте диапазон до вызова.
| Имя | Тип | По умолчанию |
|---|---|---|
idx | int | — |
idxИндекс от 0 включительно до соответствующего Count исключительно. Проверьте количество до вызова.
OpenXRActionSetСуществующий ресурс набора по допустимому индексу; не копия.
GetActionSetCountint
public int GetActionSetCount();Число ресурсов наборов в этой карте. Не число активных наборов или наборов подключённого XR-сеанса.
intЧисло наборов ресурса карты, изначально 0.
GetActionSetsReckfell.Collections.Array
public Reckfell.Collections.Array GetActionSets();Список ресурсов наборов. Getter возвращает общий Array, не независимую копию: Clear() меняет карту без Changed. Setter сначала очищает текущий список, затем добавляет валидные наборы без повторов одного ресурса; Changed не испускается, уникальность ResourceName не проверяется. Самоприсваивание полученного массива очищает список. Для замены сначала создайте Duplicate() контейнера; для обычных изменений используйте AddActionSet/RemoveActionSet.
Reckfell.Collections.ArrayОбщий Array карты; не очищайте и не присваивайте его обратно без отдельной копии контейнера.
GetInteractionProfileOpenXRInteractionProfile
public OpenXRInteractionProfile GetInteractionProfile(int idx);Читает ресурс профиля по индексу 0…GetInteractionProfileCount()-1. Возвращает тот же ресурс, не независимую копию; сначала проверьте диапазон.
| Имя | Тип | По умолчанию |
|---|---|---|
idx | int | — |
idxИндекс от 0 включительно до соответствующего Count исключительно. Проверьте количество до вызова.
OpenXRInteractionProfileСуществующий ресурс профиля по допустимому индексу; не копия.
GetInteractionProfileCountint
public int GetInteractionProfileCount();Число профилей в ресурсе карты. Не количество контроллеров, гарнитур или профилей, поддержанных подключённым runtime.
intЧисло ресурсов профилей, изначально 0.
GetInteractionProfilesReckfell.Collections.Array
public Reckfell.Collections.Array GetInteractionProfiles();Список ресурсов профилей. Getter возвращает общий Array. Setter очищает прежние связи, затем добавляет профили через AddInteractionProfile; возможны несколько Changed. Самоприсваивание общего массива очищает список: для замены используйте отдельный контейнер, например Duplicate(). Профиль принадлежит одной карте; перенос удаляет его из прежней. Это ресурсы привязок, не перечень подключённых контроллеров.
Reckfell.Collections.ArrayОбщий Array профилей; изменение контейнера напрямую меняет ресурс карты.
RemoveActionSetvoid
public void RemoveActionSet(OpenXRActionSet actionSet);Удаляет переданный ресурс из этой карты, если он есть, и испускает Changed. Не ищет по имени, не уничтожает внешние ссылки и не отключает уже подключённый runtime-набор.
| Имя | Тип | По умолчанию |
|---|---|---|
actionSet | OpenXRActionSet | — |
actionSetСуществующий ненулевой ресурс набора; операции используют идентичность ресурса, а не совпадение имени.
RemoveInteractionProfilevoid
public void RemoveInteractionProfile(OpenXRInteractionProfile interactionProfile);Удаляет существующий ресурс профиля из этой карты, сбрасывает его связь с картой и испускает Changed. При отсутствии ресурса ничего не меняется. Привязки уже подключённого сеанса не перестраиваются.
| Имя | Тип | По умолчанию |
|---|---|---|
interactionProfile | OpenXRInteractionProfile | — |
interactionProfileСуществующий ненулевой ресурс профиля; при добавлении может перейти из прежней карты.
SetActionSetsvoid
public void SetActionSets(Reckfell.Collections.Array actionSets);Список ресурсов наборов. Getter возвращает общий Array, не независимую копию: Clear() меняет карту без Changed. Setter сначала очищает текущий список, затем добавляет валидные наборы без повторов одного ресурса; Changed не испускается, уникальность ResourceName не проверяется. Самоприсваивание полученного массива очищает список. Для замены сначала создайте Duplicate() контейнера; для обычных изменений используйте AddActionSet/RemoveActionSet.
| Имя | Тип | По умолчанию |
|---|---|---|
actionSets | Reckfell.Collections.Array | — |
actionSetsОтдельный Array ресурсов OpenXRActionSet. Если исходите из getter этой карты, сначала вызовите Duplicate() контейнера; самоприсваивание потеряет список.
SetInteractionProfilesvoid
public void SetInteractionProfiles(Reckfell.Collections.Array interactionProfiles);Список ресурсов профилей. Getter возвращает общий Array. Setter очищает прежние связи, затем добавляет профили через AddInteractionProfile; возможны несколько Changed. Самоприсваивание общего массива очищает список: для замены используйте отдельный контейнер, например Duplicate(). Профиль принадлежит одной карте; перенос удаляет его из прежней. Это ресурсы привязок, не перечень подключённых контроллеров.
| Имя | Тип | По умолчанию |
|---|---|---|
interactionProfiles | Reckfell.Collections.Array | — |
interactionProfilesОтдельный Array ненулевых OpenXRInteractionProfile. Не передавайте общий getter-массив этой же карты без Duplicate().