protected virtual void SetupPlayArea()
 {
     playArea = VRTK_DeviceFinder.PlayAreaTransform();
     if (playArea != null)
     {
         lastPlayAreaPosition = playArea.position;
         collisionTracker     = playArea.GetComponent <VRTK_CollisionTracker>();
         if (collisionTracker == null)
         {
             collisionTracker = playArea.gameObject.AddComponent <VRTK_CollisionTracker>();
         }
         ManageCollisionListeners(true);
     }
 }
 /// <summary>
 /// Observable TriggerExit event
 /// </summary>
 /// <param name="events"></param>
 /// <returns></returns>
 public static IObservable <CollisionTrackerEventArgs> TriggerExitAsObservable(this VRTK_CollisionTracker events)
 {
     return(Observable.FromEvent <CollisionTrackerEventHandler, CollisionTrackerEventArgs>(
                h => (s, e) => h(e),
                h => events.TriggerExit += h,
                h => events.TriggerExit -= h));
 }
 /// <summary>
 /// Observable CollisionStay event
 /// </summary>
 /// <param name="events"></param>
 /// <returns></returns>
 public static IObservable <CollisionTrackerEventArgs> CollisionStayAsObservable(this VRTK_CollisionTracker events)
 {
     return(Observable.FromEvent <CollisionTrackerEventHandler, CollisionTrackerEventArgs>(
                h => (s, e) => h(e),
                h => events.CollisionStay += h,
                h => events.CollisionStay -= h));
 }