Class PokePointer
A near interaction pointer that generates touch events based on touchables in close proximity.
Inheritance
Implements
Inherited Members
Namespace: Microsoft.MixedReality.Toolkit.Input
Assembly: cs.temp.dll.dll
Syntax
public class PokePointer : BaseControllerPointer, IMixedRealityControllerPoseSynchronizer, IMixedRealitySourcePoseHandler, IMixedRealitySourceStateHandler, IMixedRealityInputHandler, IMixedRealityBaseInputHandler, IMixedRealityInputHandler<float>, IMixedRealityInputHandler<Vector2>, IMixedRealityInputHandler<Vector3>, IMixedRealityInputHandler<Quaternion>, IMixedRealityInputHandler<MixedRealityPose>, IEventSystemHandler, IMixedRealityNearPointer, IMixedRealityPointer, IEqualityComparer
Remarks
If a poke pointer has no [CurrentTouchableObjectDown](xref:Microsoft.MixedReality.Toolkit.Input.PokePointer.CurrentTouchableObjectDown), then it will try to select one from the Reachable Objects based on:
1. Layer mask priority: Lower-priority layer masks will only be considered if higher-priority layers don't contain any Reachable Objects.
1. Touchable Distance: the closest object in the highest priority layers is selected based on [DistanceToTouchable](xref:Microsoft.MixedReality.Toolkit.Input.BaseNearInteractionTouchable.DistanceToTouchable*).
1. Ray Distance: The object becomes the [CurrentTouchableObjectDown](xref:Microsoft.MixedReality.Toolkit.Input.PokePointer.CurrentTouchableObjectDown) once the ray cast distance becomes negative (behind the surface). At this point the [OnTouchStarted](xref:Microsoft.MixedReality.Toolkit.Input.IMixedRealityTouchHandler.OnTouchStarted*) or [OnPointerDown](xref:Microsoft.MixedReality.Toolkit.Input.IMixedRealityPointerHandler.OnPointerDown*) event is raised.
If a poke pointer _does_ have a [CurrentTouchableObjectDown](xref:Microsoft.MixedReality.Toolkit.Input.PokePointer.CurrentTouchableObjectDown) it will not consider any other object, until the [DistanceToTouchable](xref:Microsoft.MixedReality.Toolkit.Input.BaseNearInteractionTouchable.DistanceToTouchable*) exceeds the [DebounceThreshold](xref:Microsoft.MixedReality.Toolkit.Input.BaseNearInteractionTouchable.DebounceThreshold) (in front of the surface). At this point the active object is cleared and the [OnTouchCompleted](xref:Microsoft.MixedReality.Toolkit.Input.IMixedRealityTouchHandler.OnTouchCompleted*) or [OnPointerUp](xref:Microsoft.MixedReality.Toolkit.Input.IMixedRealityPointerHandler.OnPointerUp*) event is raised.
Fields
line
Declaration
protected LineRenderer line
Field Value
Type | Description |
---|---|
LineRenderer |
touchableDistance
Declaration
protected float touchableDistance
Field Value
Type | Description |
---|---|
Single |
triggerInteraction
Declaration
protected QueryTriggerInteraction triggerInteraction
Field Value
Type | Description |
---|---|
QueryTriggerInteraction |
visuals
Declaration
protected GameObject visuals
Field Value
Type | Description |
---|---|
GameObject |
Properties
ClosestProximityTouchable
The closest touchable component that has been detected.
Declaration
public BaseNearInteractionTouchable ClosestProximityTouchable { get; }
Property Value
Type | Description |
---|---|
BaseNearInteractionTouchable |
Remarks
The closest touchable component limits the set of objects which are currently touchable. These are all the game objects in the subtree of the closest touchable component's owner object.
CurrentTouchableObjectDown
The current object that is being touched.
Declaration
public GameObject CurrentTouchableObjectDown { get; }
Property Value
Type | Description |
---|---|
GameObject |
IgnoreCollidersNotInFOV
Whether to ignore colliders that may be near the pointer, but not actually in the visual FOV. This can prevent accidental touches, and will allow hand rays to turn on when you may be near a touchable but cannot see it. Visual FOV is defined by cone centered about display center, radius equal to half display height.
Declaration
public bool IgnoreCollidersNotInFOV { get; set; }
Property Value
Type | Description |
---|---|
Boolean |
IsInteractionEnabled
Is the pointer active and have the conditions for the interaction been satisfied to enable the interaction?
Declaration
public override bool IsInteractionEnabled { get; }
Property Value
Type | Description |
---|---|
Boolean |
Overrides
IsNearObject
Returns true if the hand is near anything that's grabbable Currently performs a sphere cast in the direction of the hand ray. Currently anything that has a collider is considered "Grabbable" Eventually we need to filter based on things that can respond to grab events.
Declaration
public bool IsNearObject { get; }
Property Value
Type | Description |
---|---|
Boolean |
PokeLayerMasks
The LayerMasks, in prioritized order, that are used to determine the touchable objects.
Declaration
public LayerMask[] PokeLayerMasks { get; }
Property Value
Type | Description |
---|---|
LayerMask[] |
Remarks
Only BaseNearInteractionTouchables in one of the LayerMasks will raise touch events.
PreviousPosition
Declaration
public Vector3 PreviousPosition { get; }
Property Value
Type | Description |
---|---|
Vector3 |
SceneQueryBufferSize
Maximum number of colliders that can be detected in a scene query.
Declaration
public int SceneQueryBufferSize { get; }
Property Value
Type | Description |
---|---|
Int32 |
TouchableDistance
Maximum distance a which a touchable surface can be interacted with.
Declaration
public float TouchableDistance { get; }
Property Value
Type | Description |
---|---|
Single |
TriggerInteraction
Specify whether queries for touchable surfaces hit triggers.
Declaration
public QueryTriggerInteraction TriggerInteraction { get; }
Property Value
Type | Description |
---|---|
QueryTriggerInteraction |
Methods
OnEnable()
Declaration
protected override void OnEnable()
Overrides
OnInputDown(InputEventData)
Input Down updates from Interactions, Keys, or any other simple input.
Declaration
public override void OnInputDown(InputEventData eventData)
Parameters
Type | Name | Description |
---|---|---|
InputEventData | eventData |
Overrides
OnInputUp(InputEventData)
Input Up updates from Interactions, Keys, or any other simple input.
Declaration
public override void OnInputUp(InputEventData eventData)
Parameters
Type | Name | Description |
---|---|---|
InputEventData | eventData |
Overrides
OnPostSceneQuery()
Called after performing the scene query.
Declaration
public override void OnPostSceneQuery()
Overrides
OnPreCurrentPointerTargetChange()
Called during the scene query just before the current pointer target changes.
Declaration
public override void OnPreCurrentPointerTargetChange()
Overrides
OnPreSceneQuery()
Declaration
public override void OnPreSceneQuery()
Overrides
OnSourceDetected(SourceStateEventData)
Raised when a source is detected.
Declaration
public override void OnSourceDetected(SourceStateEventData eventData)
Parameters
Type | Name | Description |
---|---|---|
SourceStateEventData | eventData |
Overrides
OnSourceLost(SourceStateEventData)
Raised when a source is lost.
Declaration
public override void OnSourceLost(SourceStateEventData eventData)
Parameters
Type | Name | Description |
---|---|---|
SourceStateEventData | eventData |
Overrides
OnValidate()
Declaration
protected void OnValidate()
Explicit Interface Implementations
IMixedRealityNearPointer.TryGetDistanceToNearestSurface(out Single)
Near pointers often interact with surfaces.
This method provides a mechanism to get the distance to the closest surface the near pointer is interacting with.
Declaration
bool IMixedRealityNearPointer.TryGetDistanceToNearestSurface(out float distance)
Parameters
Type | Name | Description |
---|---|---|
Single | distance | Out parameter filled with the distance along the surface normal from the surface to the pointer if available, otherwise 0.0f. |
Returns
Type | Description |
---|---|
Boolean | True if a distance was retrieved, false if not. |
IMixedRealityNearPointer.TryGetNearGraspPoint(out Vector3)
For near pointer we may want to draw a tether between the pointer and the object.
The visual grasp point (average of index and thumb) may actually be different from the pointer position (the palm).
This method provides a mechanism to get the visual grasp point.
NOTE: Not all near pointers have a grasp point (for example a poke pointer).
Declaration
bool IMixedRealityNearPointer.TryGetNearGraspPoint(out Vector3 position)
Parameters
Type | Name | Description |
---|---|---|
Vector3 | position | Out parameter filled with the grasp position if available, otherwise Vector3.zero. |
Returns
Type | Description |
---|---|
Boolean | True if a grasp point was retrieved, false if not. |
IMixedRealityNearPointer.TryGetNormalToNearestSurface(out Vector3)
Near pointers often interact with surfaces.
This method provides a mechanism to get the normal of the closest surface the near pointer is interacting with.
Declaration
bool IMixedRealityNearPointer.TryGetNormalToNearestSurface(out Vector3 normal)
Parameters
Type | Name | Description |
---|---|---|
Vector3 | normal | Out parameter filled with the surface normal if available, otherwise Vector3.zero. |
Returns
Type | Description |
---|---|
Boolean | True if a normal was retrieved, false if not. |