Class TapToPlace
  
  Tap to place is a far interaction component used to place objects on a surface.
 
  
  
  
    Implements
    IMixedRealityPointerHandler
   
  
  
  Assembly: cs.temp.dll.dll
  
  
    public class TapToPlace : Solver, IMixedRealityPointerHandler
   
  Fields
  
  
  
  
  
  
  Declaration
  
    protected RaycastHit CurrentHit
   
  Field Value
  
    
      
        | Type | 
        Description | 
      
    
    
      
        | RaycastHit | 
         | 
      
    
  
  
  
  
  The current ray is based on the TrackedTargetType (Controller Ray, Head, Hand Joint).
The following properties are updated each frame while the game object is selected to determine
object placement if there is a hit on a surface.
 
  
  Declaration
  
    protected RayStep CurrentRay
   
  Field Value
  
  
  
  
  
  
  Declaration
  
    protected bool DidHitSurface
   
  Field Value
  
  
  
  
  
  
  Declaration
  
    protected float DoubleClickTimeout
   
  Field Value
  
  
  
  
  
  
  Declaration
  
    protected float LastTimeClicked
   
  Field Value
  
  Properties
  
  
  
  
  
  If true, the game object to place will start out selected.  The object will immediately start
following the TrackedTargetType (Head or Controller Ray) and then a tap is required to place the object.
This value must be modified before Start() is invoked in order to have any effect.
 
  
  Declaration
  
    public bool AutoStart { get; set; }
   
  Property Value
  
  
  
  
  
  If true and in the Unity Editor, the normal of the raycast hit will be drawn in yellow.
 
  
  Declaration
  
    public bool DebugEnabled { get; set; }
   
  Property Value
  
  
  
  
  
  The default distance (in meters) an object will be placed relative to the TrackedTargetType forward in the SolverHandler.
The GameObjectToPlace will be placed at the default placement distance if a surface is not hit by the raycast.
 
  
  Declaration
  
    public float DefaultPlacementDistance { get; set; }
   
  Property Value
  
  
  
  
  
  The current game object layer before it is temporarily switched to IgnoreRaycast while placing the game object.
 
  
  Declaration
  
    protected int GameObjectLayer { get; set; }
   
  Property Value
  
  
  
  
  
  If true, the game object to place is selected.
 
  
  Declaration
  
    public bool IsBeingPlaced { get; protected set; }
   
  Property Value
  
  
  
  
  
  
  
  Declaration
  
    protected bool IsColliderPresent { get; }
   
  Property Value
  
  
  
  
  
  If true, the game object to place will remain upright and in line with Vector3.up
 
  
  Declaration
  
    public bool KeepOrientationVertical { get; set; }
   
  Property Value
  
  
  
  
  
  Array of LayerMask to execute from highest to lowest priority. First layermask to provide a raycast hit will be used by component.
 
  
  Declaration
  
    public LayerMask[] MagneticSurfaces { get; set; }
   
  Property Value
  
    
      
        | Type | 
        Description | 
      
    
    
      
        | LayerMask[] | 
         | 
      
    
  
  
  
  
  
  The max distance (in meters) to place an object if there is a raycast hit on a surface
 
  
  Declaration
  
    public float MaxRaycastDistance { get; set; }
   
  Property Value
  
  
  
  
  
  This event is triggered once when the game object to place is selected.
 
  
  Declaration
  
    public UnityEvent OnPlacingStarted { get; set; }
   
  Property Value
  
    
      
        | Type | 
        Description | 
      
    
    
      
        | UnityEvent | 
         | 
      
    
  
  
  
  
  
  This event is triggered once when the game object to place is unselected, placed.
 
  
  Declaration
  
    public UnityEvent OnPlacingStopped { get; set; }
   
  Property Value
  
    
      
        | Type | 
        Description | 
      
    
    
      
        | UnityEvent | 
         | 
      
    
  
  
  
  
  
  If false, the game object to place will not change its rotation according to the surface hit.  The object will
remain facing the camera while IsBeingPlaced is true.  If true, the object will rotate according to the surface normal
if there is a hit.
 
  
  Declaration
  
    public bool RotateAccordingToSurface { get; set; }
   
  Property Value
  
  
  
  
  
  The distance between the center of the game object to place and a surface along the surface normal, if the raycast hits a surface.
 
  
  Declaration
  
    public float SurfaceNormalOffset { get; set; }
   
  Property Value
  
  
  
  
  
  If true, the default surface normal offset will be used instead of any value specified for the SurfaceNormalOffset property.
If false, the SurfaceNormalOffset is used. The default surface normal offset is the Z extents of the bounds on the attached collider, this
ensures the object being placed is aligned on a surface.
 
  
  Declaration
  
    public bool UseDefaultSurfaceNormalOffset { get; set; }
   
  Property Value
  
  Methods
  
  
  
  
  
  
  
  Declaration
  
    public void OnPointerClicked(MixedRealityPointerEventData eventData)
   
  Parameters
  
    
      
        | Type | 
        Name | 
        Description | 
      
    
    
      
        | MixedRealityPointerEventData | 
        eventData | 
         | 
      
    
  
  
  
  
  
  
  
  Declaration
  
    public void OnPointerDown(MixedRealityPointerEventData eventData)
   
  Parameters
  
    
      
        | Type | 
        Name | 
        Description | 
      
    
    
      
        | MixedRealityPointerEventData | 
        eventData | 
         | 
      
    
  
  
  
  
  
  
  
  Declaration
  
    public void OnPointerDragged(MixedRealityPointerEventData eventData)
   
  Parameters
  
    
      
        | Type | 
        Name | 
        Description | 
      
    
    
      
        | MixedRealityPointerEventData | 
        eventData | 
         | 
      
    
  
  
  
  
  
  
  
  Declaration
  
    public void OnPointerUp(MixedRealityPointerEventData eventData)
   
  Parameters
  
    
      
        | Type | 
        Name | 
        Description | 
      
    
    
      
        | MixedRealityPointerEventData | 
        eventData | 
         | 
      
    
  
  
  
  
  
  
  
  Declaration
  
    protected virtual void PerformRaycast()
   
  
  
  
  
  Change the position of the game object if there was a hit, if not then place the object at the default distance
relative to the TrackedTargetType origin position
 
  
  Declaration
  
    protected virtual void SetPosition()
   
  
  
  
  
  
  
  Declaration
  
    protected virtual void SetRotation()
   
  
  
  
  
  Should be implemented in derived classes, but Solver can be used to flush shared transform to real transform
 
  
  Declaration
  
    public override void SolverUpdate()
   
  Overrides
  
  
  
  
  
  
  
  Declaration
  
    protected override void Start()
   
  Overrides
  
  
  
  
  
  Start the placement of a game object without the need of the OnPointerClicked event. The game object will begin to follow the
TrackedTargetType (Head by default) at a default distance. StopPlacement() must be called after StartPlacement() to stop the
game object from following the TrackedTargetType.  The game object layer is changed to IgnoreRaycast temporarily and then
restored to its original layer in StopPlacement().
 
  
  Declaration
  
    public void StartPlacement()
   
  
  
  
  
  Stop the placement of a game object without the need of the OnPointerClicked event.
 
  
  Declaration
  
    public void StopPlacement()
   
  Implements
  
      IMixedRealityPointerHandler