123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197 |
- //======= Copyright (c) Valve Corporation, All rights reserved. ===============
- //
- // Purpose: Highlights the controller when hovering over interactables
- //
- //=============================================================================
- using UnityEngine;
- using System.Collections;
- namespace Valve.VR.InteractionSystem
- {
- //-------------------------------------------------------------------------
- public class ControllerHoverHighlight : MonoBehaviour
- {
- public Material highLightMaterial;
- public bool fireHapticsOnHightlight = true;
- private Hand hand;
- private MeshRenderer bodyMeshRenderer;
- private MeshRenderer trackingHatMeshRenderer;
- private SteamVR_RenderModel renderModel;
- private bool renderModelLoaded = false;
- SteamVR_Events.Action renderModelLoadedAction;
- //-------------------------------------------------
- void Start()
- {
- hand = GetComponentInParent<Hand>();
- }
- //-------------------------------------------------
- void Awake()
- {
- renderModelLoadedAction = SteamVR_Events.RenderModelLoadedAction( OnRenderModelLoaded );
- }
- //-------------------------------------------------
- void OnEnable()
- {
- renderModelLoadedAction.enabled = true;
- }
- //-------------------------------------------------
- void OnDisable()
- {
- renderModelLoadedAction.enabled = false;
- }
- //-------------------------------------------------
- private void OnHandInitialized( int deviceIndex )
- {
- renderModel = gameObject.AddComponent<SteamVR_RenderModel>();
- renderModel.SetDeviceIndex( deviceIndex );
- renderModel.updateDynamically = false;
- }
- //-------------------------------------------------
- private void OnRenderModelLoaded( SteamVR_RenderModel renderModel, bool success )
- {
- if ( renderModel != this.renderModel )
- {
- return;
- }
- Transform bodyTransform = transform.Find( "body" );
- if ( bodyTransform != null )
- {
- bodyTransform.gameObject.layer = gameObject.layer;
- bodyTransform.gameObject.tag = gameObject.tag;
- bodyMeshRenderer = bodyTransform.GetComponent<MeshRenderer>();
- bodyMeshRenderer.material = highLightMaterial;
- bodyMeshRenderer.enabled = false;
- }
- Transform trackingHatTransform = transform.Find( "trackhat" );
- if ( trackingHatTransform != null )
- {
- trackingHatTransform.gameObject.layer = gameObject.layer;
- trackingHatTransform.gameObject.tag = gameObject.tag;
- trackingHatMeshRenderer = trackingHatTransform.GetComponent<MeshRenderer>();
- trackingHatMeshRenderer.material = highLightMaterial;
- trackingHatMeshRenderer.enabled = false;
- }
- foreach ( Transform child in transform )
- {
- if ( ( child.name != "body" ) && ( child.name != "trackhat" ) )
- {
- Destroy( child.gameObject );
- }
- }
- renderModelLoaded = true;
- }
- //-------------------------------------------------
- private void OnParentHandHoverBegin( Interactable other )
- {
- if ( !this.isActiveAndEnabled )
- {
- return;
- }
- if ( other.transform.parent != transform.parent )
- {
- ShowHighlight();
- }
- }
- //-------------------------------------------------
- private void OnParentHandHoverEnd( Interactable other )
- {
- HideHighlight();
- }
- //-------------------------------------------------
- private void OnParentHandInputFocusAcquired()
- {
- if ( !this.isActiveAndEnabled )
- {
- return;
- }
- if ( hand.hoveringInteractable && hand.hoveringInteractable.transform.parent != transform.parent )
- {
- ShowHighlight();
- }
- }
- //-------------------------------------------------
- private void OnParentHandInputFocusLost()
- {
- HideHighlight();
- }
- //-------------------------------------------------
- public void ShowHighlight()
- {
- if ( renderModelLoaded == false )
- {
- return;
- }
- if ( fireHapticsOnHightlight )
- {
- hand.controller.TriggerHapticPulse( 500 );
- }
- if ( bodyMeshRenderer != null )
- {
- bodyMeshRenderer.enabled = true;
- }
- if ( trackingHatMeshRenderer != null )
- {
- trackingHatMeshRenderer.enabled = true;
- }
- }
- //-------------------------------------------------
- public void HideHighlight()
- {
- if ( renderModelLoaded == false )
- {
- return;
- }
- if ( fireHapticsOnHightlight )
- {
- hand.controller.TriggerHapticPulse( 300 );
- }
- if ( bodyMeshRenderer != null )
- {
- bodyMeshRenderer.enabled = false;
- }
- if ( trackingHatMeshRenderer != null )
- {
- trackingHatMeshRenderer.enabled = false;
- }
- }
- }
- }
|