OpenXRInteractionProfile
Пути привязок действий для одного профиля XR-контроллера.
OpenXRInteractionProfile описывает предложенные привязки для профиля, например /interaction_profiles/khr/simple_controller. Это ресурс конфигурации, не подключённый контроллер и не отчёт о выбранном runtime-профиле. Новый ресурс имеет пустой путь, без привязок и модификаторов. Добавьте его в OpenXRActionMap до создания XR-сеанса.
В Bindings хранятся OpenXRIPBinding: одно действие и один полный путь на запись. Для двух рук нужны две записи, ссылающиеся на одно действие. Ресурс действия должен присутствовать в наборе карты. Разные записи с одной парой Action/BindingPath не допускаются.
GetBindings возвращает общий Array. Для замены сначала Duplicate() контейнера: самоприсваивание очищает список. Полный проверенный помощник удаляет запись по индексу, не меняя её BindingPath и не затрагивая другие профили, использующие тот же ресурс:
using System;
using Reckfell;
public static class ProfileBindingTools
{
// Removes a binding record from this profile, without changing the resource's path.
public static void RemoveAt(OpenXRInteractionProfile profile, int index)
{
ArgumentNullException.ThrowIfNull(profile);
using var shared = profile.GetBindings();
if (index < 0 || index >= shared.Count)
throw new ArgumentOutOfRangeException(nameof(index));
using var replacement = shared.Duplicate();
replacement.RemoveAt(index);
profile.SetBindings(replacement);
}
}Этот способ также обходится без устаревшего RemovePath: в текущем движке тот оставляет совпадающий путь на месте. Проверка удаления провалилась; исходники движка не менялись.
BindingModifiers работает иначе: getter создаёт независимый контейнер с общими ресурсами. Модификаторы уровня профиля, например D-pad, отличаются от модификаторов отдельной привязки. Один модификатор принадлежит одному профилю и переносится при назначении другому. Поддержка расширения runtime проверяется отдельно.
Проверены значения, события, массивы, перенос модификаторов, пример удаления и прежний пример сохранения карты. OpenXR оставался выключенным; принятие профиля устройством, ввод, haptics, модификаторы на устройстве и XR-сеанс не проверялись. Полная настройка: карта действий.
Объявления сверены с C# SDK 1.0.0. Раскройте имя, чтобы увидеть сигнатуры и описание.
Конструкторы1
OpenXRInteractionProfileКонструктор
public OpenXRInteractionProfile();Создаёт профиль с пустым InteractionProfilePath, без привязок и модификаторов. Не обнаруживает подключённый контроллер и не выбирает его runtime-профиль.
Свойства3
BindingModifiersСвойство
public Reckfell.Collections.Array BindingModifiers { get; set; }Модификаторы уровня профиля, например OpenXRDpadBindingModifier. Getter создаёт новый Array, но ресурсы внутри общие: Clear() результата не удаляет модификаторы профиля. Setter снимает старые связи и добавляет ресурсы заново; возможны несколько Changed. Один модификатор принадлежит одному профилю и при переносе удаляется из прежнего. Не путайте с модификаторами отдельного OpenXRIPBinding; сохранение не гарантирует поддержку расширения runtime.
BindingsСвойство
public Reckfell.Collections.Array Bindings { get; set; }Список OpenXRIPBinding. Getter возвращает общий Array; прямое редактирование меняет ресурс и обходит Changed/проверки. Setter очищает список и добавляет привязки; повтор одного экземпляра игнорируется, разные экземпляры с одинаковыми Action и BindingPath отклоняются. Самоприсваивание общего getter-массива очищает список. Для замены сначала Duplicate() контейнера; проверьте ненулевые элементы и дубли до вызова. Ресурсы внутри копии остаются общими.
InteractionProfilePathСвойство
public string InteractionProfilePath { get; set; }Полный путь interaction profile, изначально пустой; например /interaction_profiles/khr/simple_controller. Не имя действия и не путь конкретной кнопки. Setter использует метаданные движка, если они доступны, сохраняет путь и испускает Changed даже при повторе. Это не подтверждение поддержки профиля подключённым runtime.
Методы10
GetBindingOpenXRIPBinding
public OpenXRIPBinding GetBinding(int index);Возвращает существующий ресурс привязки по индексу 0…GetBindingCount()-1. Это тот же ресурс, не копия. Проверьте диапазон до вызова.
| Имя | Тип | По умолчанию |
|---|---|---|
index | int | — |
indexИндекс от 0 включительно до соответствующего Get…Count() исключительно. Проверьте количество перед вызовом.
OpenXRIPBindingТот же ресурс привязки по допустимому индексу.
GetBindingCountint
public int GetBindingCount();Число записей привязок ресурса профиля, изначально 0. Не число подключённых устройств или работающих на них входов.
intКоличество записей привязок профиля.
GetBindingModifierOpenXripBindingModifier
public OpenXripBindingModifier GetBindingModifier(int index);Читает существующий модификатор уровня профиля по индексу 0…GetBindingModifierCount()-1. Тип отличается от модификатора отдельной привязки. Ресурс общий; сначала проверьте индекс.
| Имя | Тип | По умолчанию |
|---|---|---|
index | int | — |
indexИндекс от 0 включительно до соответствующего Get…Count() исключительно. Проверьте количество перед вызовом.
OpenXripBindingModifierТот же ресурс модификатора соответствующего уровня по допустимому индексу.
GetBindingModifierCountint
public int GetBindingModifierCount();Количество модификаторов уровня профиля. Не подтверждает поддержку их расширений или фактическое применение runtime.
intКоличество сохранённых модификаторов соответствующего ресурса.
GetBindingModifiersReckfell.Collections.Array
public Reckfell.Collections.Array GetBindingModifiers();Модификаторы уровня профиля, например OpenXRDpadBindingModifier. Getter создаёт новый Array, но ресурсы внутри общие: Clear() результата не удаляет модификаторы профиля. Setter снимает старые связи и добавляет ресурсы заново; возможны несколько Changed. Один модификатор принадлежит одному профилю и при переносе удаляется из прежнего. Не путайте с модификаторами отдельного OpenXRIPBinding; сохранение не гарантирует поддержку расширения runtime.
Reckfell.Collections.ArrayНовый Array со ссылками на те же ресурсы модификаторов; не глубокая копия.
GetBindingsReckfell.Collections.Array
public Reckfell.Collections.Array GetBindings();Список OpenXRIPBinding. Getter возвращает общий Array; прямое редактирование меняет ресурс и обходит Changed/проверки. Setter очищает список и добавляет привязки; повтор одного экземпляра игнорируется, разные экземпляры с одинаковыми Action и BindingPath отклоняются. Самоприсваивание общего getter-массива очищает список. Для замены сначала Duplicate() контейнера; проверьте ненулевые элементы и дубли до вызова. Ресурсы внутри копии остаются общими.
Reckfell.Collections.ArrayОбщий Array профиля; прямое изменение контейнера меняет профиль.
GetInteractionProfilePathstring
public string GetInteractionProfilePath();Сохранённый полный путь профиля либо пустая строка. Это конфигурация ресурса, не отчёт о фактически выбранном runtime-профиле.
stringСохранённая строка профиля, изначально пустая.
SetBindingModifiersvoid
public void SetBindingModifiers(Reckfell.Collections.Array bindingModifiers);Модификаторы уровня профиля, например OpenXRDpadBindingModifier. Getter создаёт новый Array, но ресурсы внутри общие: Clear() результата не удаляет модификаторы профиля. Setter снимает старые связи и добавляет ресурсы заново; возможны несколько Changed. Один модификатор принадлежит одному профилю и при переносе удаляется из прежнего. Не путайте с модификаторами отдельного OpenXRIPBinding; сохранение не гарантирует поддержку расширения runtime.
| Имя | Тип | По умолчанию |
|---|---|---|
bindingModifiers | Reckfell.Collections.Array | — |
bindingModifiersArray модификаторов уровня профиля, например OpenXRDpadBindingModifier; не модификаторов отдельной привязки.
SetBindingsvoid
public void SetBindings(Reckfell.Collections.Array bindings);Список OpenXRIPBinding. Getter возвращает общий Array; прямое редактирование меняет ресурс и обходит Changed/проверки. Setter очищает список и добавляет привязки; повтор одного экземпляра игнорируется, разные экземпляры с одинаковыми Action и BindingPath отклоняются. Самоприсваивание общего getter-массива очищает список. Для замены сначала Duplicate() контейнера; проверьте ненулевые элементы и дубли до вызова. Ресурсы внутри копии остаются общими.
| Имя | Тип | По умолчанию |
|---|---|---|
bindings | Reckfell.Collections.Array | — |
bindingsОтдельный Array ненулевых OpenXRIPBinding без дублирующих пар Action/BindingPath. Для данных собственного getter сначала Duplicate() контейнера.
SetInteractionProfilePathvoid
public void SetInteractionProfilePath(string interactionProfilePath);Полный путь interaction profile, изначально пустой; например /interaction_profiles/khr/simple_controller. Не имя действия и не путь конкретной кнопки. Setter использует метаданные движка, если они доступны, сохраняет путь и испускает Changed даже при повторе. Это не подтверждение поддержки профиля подключённым runtime.
| Имя | Тип | По умолчанию |
|---|---|---|
interactionProfilePath | string | — |
interactionProfilePathПолный допустимый путь профиля, например /interaction_profiles/khr/simple_controller; не путь кнопки.