//======= Copyright (c) Valve Corporation, All rights reserved. =============== // // Purpose: Triggers haptic pulses based on distance between 2 positions // //============================================================================= using UnityEngine; using System.Collections; namespace Valve.VR.InteractionSystem { //------------------------------------------------------------------------- public class DistanceHaptics : MonoBehaviour { public Transform firstTransform; public Transform secondTransform; public AnimationCurve distanceIntensityCurve = AnimationCurve.Linear( 0.0f, 800.0f, 1.0f, 800.0f ); public AnimationCurve pulseIntervalCurve = AnimationCurve.Linear( 0.0f, 0.01f, 1.0f, 0.0f ); //------------------------------------------------- IEnumerator Start() { while ( true ) { float distance = Vector3.Distance( firstTransform.position, secondTransform.position ); SteamVR_TrackedObject trackedObject = GetComponentInParent(); if ( trackedObject ) { float pulse = distanceIntensityCurve.Evaluate( distance ); SteamVR_Controller.Input( (int)trackedObject.index ).TriggerHapticPulse( (ushort)pulse ); } float nextPulse = pulseIntervalCurve.Evaluate( distance ); yield return new WaitForSeconds( nextPulse ); } } } }