Preparing search index...

    Unified provider for physical interactions (Poke and Direct/Pinch). Combines precise index finger detection (spherecast) with proximity detection (collider).

    This provider handles both poke and pinch gestures in a single state machine, eliminating async coordination issues between separate providers and enabling seamless transitions between interaction types.

    Hierarchy (View Summary)

    Index

    Constructors

    Properties

    _currentInteractableHitInfo: InteractableHitInfo = null
    interactionManager: InteractionManager = ...
    targetingMode: TargetingMode = ...

    Accessors

    • get currentInteractableSet(): Set<Interactable>

      Get the set of currently hovered Interactables Poke hover requires single validation (index touching) Direct-only hover requires dual validation (index touching and nearby)

      Returns Set<Interactable>

    • get currentInteractionPlanes(): InteractionPlane[]

      Current interaction planes detected by proximity colliders Used by HandInteractor for field targeting mode

      Returns InteractionPlane[]

    • get direction(): vec3

      Direction of the index finger (forward vector). Used for interaction raycasting and visual feedback.

      Returns vec3

    • get drawDebug(): boolean

      Returns boolean

    • set drawDebug(debug: boolean): void

      Parameters

      • debug: boolean

      Returns void

    • get endPoint(): vec3

      Returns vec3

      end position in world space

    • get hasPushedThrough(): boolean

      Whether the finger has pushed through the interactable beyond the threshold. When true, the poke is considered invalid to prevent accidental triggers.

      Returns boolean

    • get interactionStrength(): number

      Current interaction strength (0-1).

      Returns different values based on interaction state:

      • Poke: Normalized poke depth (0 at surface, 1 at max depth)
      • Pinch: Pinch strength from hand tracking
      • Direct hover: Pinch strength for visual feedback (e.g., cursor squish)
      • No interaction: null

      Returns number

    • get normalizedPokeDepth(): number

      Normalized poke depth (0-1). 0 = at surface, 1 = at or beyond max depth threshold (POKE_STRENGTH_DISTANCE_THRESHOLD_CM).

      Returns number

    • get pokeDepth(): number

      Current poke depth in centimeters. Distance from the hit surface to the fingertip (increases as finger pushes deeper).

      Returns number

    • get pokeIsValid(): boolean

      Whether the current poke gesture is valid for interaction. Returns false if the finger has pushed through the interactable or hand tracking is unavailable.

      Returns boolean

    • get startPoint(): vec3

      Returns vec3

      origin position in world space

    Methods

    • Set the _currentInteractableHitInfo to null, used when an Interactable is deleted from Lens Studio, to keep state in sync

      Returns void

    • Clears an InteractionPlane from the cache (in the event of the InteractionPlane being de-registered).

      Parameters

      Returns void

    • Returns boolean

      whether the provider has found a target or not

    • Reset all internal state

      Returns void