73 lines
		
	
	
		
			2.4 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
			
		
		
	
	
			73 lines
		
	
	
		
			2.4 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
| using UnityEngine.XR.Interaction.Toolkit;
 | |
| 
 | |
| namespace UnityEngine.XR.Content.Interaction.Analytics
 | |
| {
 | |
|     /// <summary>
 | |
|     /// Class that connects the Physics Interaction station scene objects with their respective analytics events.
 | |
|     /// </summary>
 | |
|     [AddComponentMenu("")]
 | |
|     [DisallowMultipleComponent]
 | |
|     class XrcPhysicsInteractionStationAnalytics : MonoBehaviour
 | |
|     {
 | |
|         const float k_FrequencyToSendPushFlopDoor = 4f;
 | |
| 
 | |
|         static readonly PushFlipDoor k_PushFlipDoorParameter = new PushFlipDoor();
 | |
| 
 | |
|         [Header("Physics Simple Controls Substation")]
 | |
|         [SerializeField]
 | |
|         XRBaseInteractable[] m_SpringInteractables;
 | |
| 
 | |
|         [SerializeField]
 | |
|         XRBaseInteractable[] m_HingeInteractables;
 | |
| 
 | |
|         [Header("Cabinet Example Substation")]
 | |
|         [SerializeField]
 | |
|         XRBaseInteractable m_Cabinet1Interactable;
 | |
| 
 | |
|         [SerializeField]
 | |
|         XRBaseInteractable m_Cabinet2Interactable;
 | |
| 
 | |
|         [Header("Doors Example Substation")]
 | |
|         [SerializeField]
 | |
|         Rigidbody m_FlipDoorRigidbody;
 | |
| 
 | |
|         [SerializeField]
 | |
|         XRBaseInteractable m_DoorKeyInteractable;
 | |
| 
 | |
|         [SerializeField]
 | |
|         Door m_DoorLocked;
 | |
| 
 | |
|         [SerializeField]
 | |
|         XRBaseInteractable m_DoorHandleInteractable;
 | |
| 
 | |
|         float m_TimeToSendPushFlopDoor;
 | |
| 
 | |
|         void Awake()
 | |
|         {
 | |
|             XrcAnalyticsUtils.Register(m_SpringInteractables, new GrabSpringJoint());
 | |
|             XrcAnalyticsUtils.Register(m_HingeInteractables, new GrabHingeJoint());
 | |
| 
 | |
|             XrcAnalyticsUtils.Register(m_Cabinet1Interactable, new GrabCabinet1());
 | |
|             XrcAnalyticsUtils.Register(m_Cabinet2Interactable, new GrabCabinet2());
 | |
| 
 | |
|             if (m_FlipDoorRigidbody != null)
 | |
|             {
 | |
|                 var onCollision = m_FlipDoorRigidbody.gameObject.AddComponent<OnCollision>();
 | |
|                 onCollision.onEnter.AddListener(OnFlipDoorCollision);
 | |
|             }
 | |
|             XrcAnalyticsUtils.Register(m_DoorKeyInteractable, new GrabDoorKey());
 | |
|             XrcAnalyticsUtils.Register(m_DoorLocked, new DoorLocked(), new DoorUnlocked());
 | |
|             XrcAnalyticsUtils.Register(m_DoorHandleInteractable, new GrabDoorHandle());
 | |
|         }
 | |
| 
 | |
|         void OnFlipDoorCollision(Collision collision)
 | |
|         {
 | |
|             if (Time.unscaledTime < m_TimeToSendPushFlopDoor)
 | |
|                 return;
 | |
| 
 | |
|             m_TimeToSendPushFlopDoor = Time.unscaledTime + k_FrequencyToSendPushFlopDoor;
 | |
|             XrcAnalytics.interactionEvent.Send(k_PushFlipDoorParameter);
 | |
|         }
 | |
|     }
 | |
| }
 |