Advertisement
Pro_Unit

DefaultTrackableEventHandler

Jan 24th, 2019
208
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 4.42 KB | None | 0 0
  1. /*==============================================================================
  2. Copyright (c) 2017 PTC Inc. All Rights Reserved.
  3.  
  4. Copyright (c) 2010-2014 Qualcomm Connected Experiences, Inc.
  5. All Rights Reserved.
  6. Confidential and Proprietary - Protected under copyright and other laws.
  7. ==============================================================================*/
  8.  
  9. using UnityEngine;
  10. using UnityEngine.Events;
  11. using Vuforia;
  12.  
  13. /// <summary>
  14. /// A custom handler that implements the ITrackableEventHandler interface.
  15. ///
  16. /// Changes made to this file could be overwritten when upgrading the Vuforia version.
  17. /// When implementing custom event handler behavior, consider inheriting from this class instead.
  18. /// </summary>
  19. public class DefaultTrackableEventHandler : MonoBehaviour, ITrackableEventHandler
  20. {
  21.     [SerializeField] UnityEvent OnLoad;
  22.     [SerializeField] UnityEvent OnUnLoad;
  23.  
  24.     #region PROTECTED_MEMBER_VARIABLES
  25.  
  26.     protected TrackableBehaviour mTrackableBehaviour;
  27.     protected TrackableBehaviour.Status m_PreviousStatus;
  28.     protected TrackableBehaviour.Status m_NewStatus;
  29.  
  30.     #endregion // PROTECTED_MEMBER_VARIABLES
  31.  
  32.     #region UNITY_MONOBEHAVIOUR_METHODS
  33.  
  34.     protected virtual void Start()
  35.     {
  36.         mTrackableBehaviour = GetComponent<TrackableBehaviour>();
  37.         if (mTrackableBehaviour)
  38.             mTrackableBehaviour.RegisterTrackableEventHandler(this);
  39.     }
  40.  
  41.     protected virtual void OnDestroy()
  42.     {
  43.         if (mTrackableBehaviour)
  44.             mTrackableBehaviour.UnregisterTrackableEventHandler(this);
  45.     }
  46.  
  47.     #endregion // UNITY_MONOBEHAVIOUR_METHODS
  48.  
  49.     #region PUBLIC_METHODS
  50.  
  51.     /// <summary>
  52.     ///     Implementation of the ITrackableEventHandler function called when the
  53.     ///     tracking state changes.
  54.     /// </summary>
  55.     public void OnTrackableStateChanged(
  56.         TrackableBehaviour.Status previousStatus,
  57.         TrackableBehaviour.Status newStatus)
  58.     {
  59.         m_PreviousStatus = previousStatus;
  60.         m_NewStatus = newStatus;
  61.  
  62.         if (newStatus == TrackableBehaviour.Status.DETECTED ||
  63.             newStatus == TrackableBehaviour.Status.TRACKED ||
  64.             newStatus == TrackableBehaviour.Status.EXTENDED_TRACKED)
  65.         {
  66.             Debug.Log("Trackable " + mTrackableBehaviour.TrackableName + " found");
  67.             OnTrackingFound();
  68.             OnLoad.Invoke();
  69.  
  70.            
  71.         }
  72.         else if (previousStatus == TrackableBehaviour.Status.TRACKED &&
  73.                  newStatus == TrackableBehaviour.Status.NO_POSE)
  74.         {
  75.             Debug.Log("Trackable " + mTrackableBehaviour.TrackableName + " lost");
  76.             OnTrackingLost();
  77.             OnUnLoad.Invoke();
  78.            
  79.         }
  80.         else
  81.         {
  82.             // For combo of previousStatus=UNKNOWN + newStatus=UNKNOWN|NOT_FOUND
  83.             // Vuforia is starting, but tracking has not been lost or found yet
  84.             // Call OnTrackingLost() to hide the augmentations
  85.             OnTrackingLost();
  86.             OnUnLoad.Invoke();
  87.         }
  88.     }
  89.  
  90.     #endregion // PUBLIC_METHODS
  91.  
  92.     #region PROTECTED_METHODS
  93.  
  94.     protected virtual void OnTrackingFound()
  95.     {
  96.         var rendererComponents = GetComponentsInChildren<Renderer>(true);
  97.         var colliderComponents = GetComponentsInChildren<Collider>(true);
  98.         var canvasComponents = GetComponentsInChildren<Canvas>(true);
  99.  
  100.         // Enable rendering:
  101.         foreach (var component in rendererComponents)
  102.             component.enabled = true;
  103.  
  104.         // Enable colliders:
  105.         foreach (var component in colliderComponents)
  106.             component.enabled = true;
  107.  
  108.         // Enable canvas':
  109.         foreach (var component in canvasComponents)
  110.             component.enabled = true;
  111.     }
  112.  
  113.  
  114.     protected virtual void OnTrackingLost()
  115.     {
  116.         var rendererComponents = GetComponentsInChildren<Renderer>(true);
  117.         var colliderComponents = GetComponentsInChildren<Collider>(true);
  118.         var canvasComponents = GetComponentsInChildren<Canvas>(true);
  119.  
  120.         // Disable rendering:
  121.         foreach (var component in rendererComponents)
  122.             component.enabled = false;
  123.  
  124.         // Disable colliders:
  125.         foreach (var component in colliderComponents)
  126.             component.enabled = false;
  127.  
  128.         // Disable canvas':
  129.         foreach (var component in canvasComponents)
  130.             component.enabled = false;
  131.     }
  132.  
  133.     #endregion // PROTECTED_METHODS
  134. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement