Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using UnityEngine;
- using UnityEngine.Splines;
- public class SnapAudioEmitterToSpline : MonoBehaviour
- {
- public SplineContainer splineContainer;
- public AudioSource audioSource;
- private AudioListener audioListener;
- private float m_audioDistanceNormalized;
- private void Reset()
- {
- audioSource = GetComponentInParent<AudioSource>();
- }
- private void Update()
- {
- if (audioSource)
- {
- UpdateAudio();
- }
- }
- private void UpdateAudio()
- {
- if (!audioListener) audioListener = FindObjectOfType<AudioListener>();
- if (!audioListener) return;
- if (!splineContainer) return;
- Vector3 earPosition = audioListener.transform.position;
- //Ear position in the spline's local-space
- earPosition = splineContainer.transform.InverseTransformPoint(earPosition);
- SplineUtility.GetNearestPoint(splineContainer.Spline, earPosition, out var nearestPoint, out _, SplineUtility.PickResolutionMin, 1);
- audioSource.dopplerLevel = 0;
- audioSource.transform.position = splineContainer.transform.TransformPoint(nearestPoint);
- }
- private void OnDrawGizmosSelected()
- {
- if (audioSource)
- {
- Gizmos.DrawSphere(audioSource.transform.position, 1f);
- Gizmos.DrawWireSphere(audioSource.transform.position, audioSource.maxDistance);
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement