Class XRInteractionGroup
Behaviour implementation of IXRInteractionGroup. An Interaction Group hooks into the interaction system (via XRInteractionManager) and enforces that only one IXRGroupMember within the Group can interact at a time. Each Group member must be either an IXRInteractor or an IXRInteractionGroup.
Inherited Members
Namespace: UnityEngine.XR.Interaction.Toolkit
Assembly: Unity.XR.Interaction.Toolkit.dll
Syntax
[DisallowMultipleComponent]
[AddComponentMenu("XR/XR Interaction Group", 11)]
[HelpURL("https://docs.unity3d.com/Packages/com.unity.xr.interaction.toolkit@2.5/api/UnityEngine.XR.Interaction.Toolkit.XRInteractionGroup.html")]
[DefaultExecutionOrder(-100)]
public class XRInteractionGroup : MonoBehaviour, IXRInteractionOverrideGroup, IXRInteractionGroup, IXRGroupMember
Remarks
The member prioritized for interaction in any given frame is whichever member was interacting the previous frame if it can select in the current frame. If there is no such member, then the interacting member is whichever one in the ordered list of members interacts first.
Properties
activeInteractor
The Interactor in this Interaction Group or any of its member Groups that is currently performing interaction.
Declaration
public IXRInteractor activeInteractor { get; }
Property Value
Type | Description |
---|---|
IXRInteractor |
containingGroup
The Interaction Group that contains this member.
Declaration
public IXRInteractionGroup containingGroup { get; }
Property Value
Type | Description |
---|---|
IXRInteractionGroup |
focusInteractable
The Interactable that is currently being focused by an Interactor in this Interaction Group or any of its member Groups.
Declaration
public IXRFocusInteractable focusInteractable { get; }
Property Value
Type | Description |
---|---|
IXRFocusInteractable |
focusInteractor
The Interactor in this Interaction Group or any of its member Groups that initiated the last focus event.
Declaration
public IXRInteractor focusInteractor { get; }
Property Value
Type | Description |
---|---|
IXRInteractor |
groupName
The name of the interaction group, which can be used to retrieve it from the Interaction Manager.
Declaration
public string groupName { get; }
Property Value
Type | Description |
---|---|
string |
interactionManager
The XRInteractionManager that this Interaction Group will communicate with (will find one if null).
Declaration
public XRInteractionManager interactionManager { get; set; }
Property Value
Type | Description |
---|---|
XRInteractionManager |
startingGroupMembers
Ordered list of Interactors or Interaction Groups that are registered with the Group on Awake. All objects in this list should implement the IXRGroupMember interface and either the IXRInteractor interface or the IXRInteractionGroup interface.
Declaration
public List<Object> startingGroupMembers { get; set; }
Property Value
Type | Description |
---|---|
List<Object> |
Remarks
There are separate methods to access and modify the Group members used after Awake.
See Also
Methods
AddGroupMember(IXRGroupMember)
Adds the given Group member to the end of the ordered list of members in the Group. Causes no change if the Group member is already added.
Declaration
public void AddGroupMember(IXRGroupMember groupMember)
Parameters
Type | Name | Description |
---|---|---|
IXRGroupMember | groupMember | The Group member to add. |
Remarks
groupMember
must implement either IXRInteractor or IXRInteractionGroup.
AddInteractionOverrideForGroupMember(IXRGroupMember, IXRGroupMember)
Adds overrideGroupMember
as a possible interaction override for sourceGroupMember
.
Declaration
public void AddInteractionOverrideForGroupMember(IXRGroupMember sourceGroupMember, IXRGroupMember overrideGroupMember)
Parameters
Type | Name | Description |
---|---|---|
IXRGroupMember | sourceGroupMember | The Group member whose interaction can be potentially overridden by |
IXRGroupMember | overrideGroupMember | The Group member to add as a possible interaction override. |
Remarks
Both members must be registered with the Group. Additionally, overrideGroupMember
must
implement either IXRSelectInteractor or IXRInteractionOverrideGroup.
This method must not create a loop in the chain of overrides for sourceGroupMember
. Use the
implementation of GroupMemberIsPartOfOverrideChain(IXRGroupMember, IXRGroupMember) to ensure there is no loop before adding override.
AddStartingInteractionOverride(Object, Object)
Adds overrideGroupMember
to the list of Group members that are to be added as
interaction overrides for sourceGroupMember
on Awake. Both objects must already be
included in the startingGroupMembers list. The override object should implement either the
IXRSelectInteractor interface or the IXRInteractionOverrideGroup interface.
Declaration
public void AddStartingInteractionOverride(Object sourceGroupMember, Object overrideGroupMember)
Parameters
Type | Name | Description |
---|---|---|
Object | sourceGroupMember | The Group member whose interaction can be potentially overridden by
|
Object | overrideGroupMember | The Group member to add as a possible interaction override. |
Remarks
Use AddInteractionOverrideForGroupMember(IXRGroupMember, IXRGroupMember) to add to the interaction overrides used after Awake.
See Also
Awake()
See MonoBehaviour.
Declaration
protected virtual void Awake()
ClearGroupMembers()
Removes all Group members from the list of members.
Declaration
public void ClearGroupMembers()
ClearInteractionOverridesForGroupMember(IXRGroupMember)
Clears the set of possible interaction overrides for sourceGroupMember
.
Declaration
public bool ClearInteractionOverridesForGroupMember(IXRGroupMember sourceGroupMember)
Parameters
Type | Name | Description |
---|---|---|
IXRGroupMember | sourceGroupMember | The Group member whose interaction can no longer be overridden. |
Returns
Type | Description |
---|---|
bool | Returns true if there is a set of overrides for |
Remarks
sourceGroupMember
must be registered with the Group.
ContainsGroupMember(IXRGroupMember)
Checks whether the given Group member exists in the list of members.
Declaration
public bool ContainsGroupMember(IXRGroupMember groupMember)
Parameters
Type | Name | Description |
---|---|---|
IXRGroupMember | groupMember | The Group member to check for in the list. |
Returns
Type | Description |
---|---|
bool | Returns true if |
GetGroupMembers(List<IXRGroupMember>)
Returns all members in the ordered list of Group members into List results
.
Declaration
public void GetGroupMembers(List<IXRGroupMember> results)
Parameters
Type | Name | Description |
---|---|---|
List<IXRGroupMember> | results | List to receive Group members. |
Remarks
This method populates the list with the Group members at the time the method is called. It is not a live view,
meaning Group members added or removed afterward will not be reflected in the results of this method.
Clears results
before adding to it.
GetInteractionOverridesForGroupMember(IXRGroupMember, HashSet<IXRGroupMember>)
Returns all members in the set of possible interaction overrides for sourceGroupMember
into set results
.
Declaration
public void GetInteractionOverridesForGroupMember(IXRGroupMember sourceGroupMember, HashSet<IXRGroupMember> results)
Parameters
Type | Name | Description |
---|---|---|
IXRGroupMember | sourceGroupMember | The Group member whose overrides to get. |
HashSet<IXRGroupMember> | results | Set to receive override Group members. |
Remarks
sourceGroupMember
must be registered with the Group.
This method populates the set with the Group members at the time the method is called. It is not a live view,
meaning override Group members added or removed afterward will not be reflected in the results of this method.
Clears results
before adding to it.
GroupMemberIsPartOfOverrideChain(IXRGroupMember, IXRGroupMember)
Checks whether potentialOverrideGroupMember
is either the same as sourceGroupMember
or part of a chain of its override Group members and their overrides.
Declaration
public bool GroupMemberIsPartOfOverrideChain(IXRGroupMember sourceGroupMember, IXRGroupMember potentialOverrideGroupMember)
Parameters
Type | Name | Description |
---|---|---|
IXRGroupMember | sourceGroupMember | The source Group member for the potential chain of override members. |
IXRGroupMember | potentialOverrideGroupMember | The Group member to check for as part of a chain of overrides. |
Returns
Type | Description |
---|---|
bool | Returns true if |
HasDependencyOnGroup(IXRInteractionGroup)
Checks whether the given Group is either the same as this Group or a dependency of any member Group.
Declaration
public bool HasDependencyOnGroup(IXRInteractionGroup group)
Parameters
Type | Name | Description |
---|---|---|
IXRInteractionGroup | group | The Group to check for as a dependency. |
Returns
Type | Description |
---|---|
bool | Returns true if |
MoveGroupMemberTo(IXRGroupMember, int)
Moves the given Group member to the specified index in the ordered list of members in the Group. If the member is not in the list, this can be used to insert the member at the specified index.
Declaration
public void MoveGroupMemberTo(IXRGroupMember groupMember, int newIndex)
Parameters
Type | Name | Description |
---|---|---|
IXRGroupMember | groupMember | The Group member to move or add. |
int | newIndex | New index of the Group member. |
Remarks
groupMember
must implement either IXRInteractor or IXRInteractionGroup.
OnDestroy()
See MonoBehaviour.
Declaration
protected virtual void OnDestroy()
OnDisable()
See MonoBehaviour.
Declaration
protected virtual void OnDisable()
OnEnable()
See MonoBehaviour.
Declaration
protected virtual void OnEnable()
OnFocusEntering(FocusEnterEventArgs)
The XRInteractionManager calls this method right before the Interaction group first gains focus of an Interactable in a first pass.
Declaration
public void OnFocusEntering(FocusEnterEventArgs args)
Parameters
Type | Name | Description |
---|---|---|
FocusEnterEventArgs | args | Event data containing the Interaction group that is initiating the focus. |
Remarks
args
is only valid during this method call, do not hold a reference to it.
See Also
OnFocusExiting(FocusExitEventArgs)
The XRInteractionManager calls this method right before the Interaction group loses focus of an Interactable in a first pass.
Declaration
public void OnFocusExiting(FocusExitEventArgs args)
Parameters
Type | Name | Description |
---|---|---|
FocusExitEventArgs | args | Event data containing the Interaction group that is losing focus. |
Remarks
args
is only valid during this method call, do not hold a reference to it.
See Also
RemoveGroupMember(IXRGroupMember)
Removes the given Group member from the list of members.
Declaration
public bool RemoveGroupMember(IXRGroupMember groupMember)
Parameters
Type | Name | Description |
---|---|---|
IXRGroupMember | groupMember | The Group member to remove. |
Returns
Type | Description |
---|---|
bool | Returns true if |
RemoveInteractionOverrideForGroupMember(IXRGroupMember, IXRGroupMember)
Removes overrideGroupMember
as a possible interaction override for sourceGroupMember
.
Declaration
public bool RemoveInteractionOverrideForGroupMember(IXRGroupMember sourceGroupMember, IXRGroupMember overrideGroupMember)
Parameters
Type | Name | Description |
---|---|---|
IXRGroupMember | sourceGroupMember | The Group member whose interaction can no longer be overridden by |
IXRGroupMember | overrideGroupMember | The Group member to remove as a possible interaction override. |
Returns
Type | Description |
---|---|
bool | Returns true if |
Remarks
sourceGroupMember
must be registered with the Group.
RemoveStartingInteractionOverride(Object, Object)
Removes overrideGroupMember
from the list of Group members that are to be added as
interaction overrides for sourceGroupMember
on Awake.
Declaration
public bool RemoveStartingInteractionOverride(Object sourceGroupMember, Object overrideGroupMember)
Parameters
Type | Name | Description |
---|---|---|
Object | sourceGroupMember | The Group member whose interaction can no longer be overridden by
|
Object | overrideGroupMember | The Group member to remove as a possible interaction override. |
Returns
Type | Description |
---|---|
bool | Returns true if |
Remarks
Use RemoveInteractionOverrideForGroupMember(IXRGroupMember, IXRGroupMember) to remove from the interaction overrides used after Awake.
See Also
Reset()
See MonoBehaviour.
Declaration
[Conditional("UNITY_EDITOR")]
protected virtual void Reset()
Events
registered
Calls the methods in its invocation list when this Interaction Group is registered with an Interaction Manager.
Declaration
public event Action<InteractionGroupRegisteredEventArgs> registered
Event Type
Type | Description |
---|---|
Action<InteractionGroupRegisteredEventArgs> |
Remarks
The InteractionGroupRegisteredEventArgs passed to each listener is only valid while the event is invoked, do not hold a reference to it.
See Also
unregistered
Calls the methods in its invocation list when this Interaction Group is unregistered from an Interaction Manager.
Declaration
public event Action<InteractionGroupUnregisteredEventArgs> unregistered
Event Type
Type | Description |
---|---|
Action<InteractionGroupUnregisteredEventArgs> |
Remarks
The InteractionGroupUnregisteredEventArgs passed to each listener is only valid while the event is invoked, do not hold a reference to it.