50 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
			
		
		
	
	
			50 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
using UnityEngine;
 | 
						|
 | 
						|
public class VehicleSoundController : MonoBehaviour
 | 
						|
{
 | 
						|
    public AudioSource[] engineAudioSources;  // Array of AudioSources to control
 | 
						|
    public float minPitch = 0.8f;  // Idle pitch
 | 
						|
    public float maxPitch = 2.0f;  // High-speed pitch
 | 
						|
    public float maxSpeed = 20f;   // Adjust based on vehicle speed
 | 
						|
 | 
						|
    private Rigidbody vehicleRigidbody;
 | 
						|
 | 
						|
    void Start()
 | 
						|
    {
 | 
						|
        vehicleRigidbody = GetComponent<Rigidbody>();
 | 
						|
 | 
						|
        if (engineAudioSources.Length == 0)
 | 
						|
        {
 | 
						|
            Debug.LogWarning("No AudioSources assigned! Disabling sound control.");
 | 
						|
            enabled = false;
 | 
						|
        }
 | 
						|
    }
 | 
						|
 | 
						|
    void Update()
 | 
						|
    {
 | 
						|
        float speed = vehicleRigidbody.linearVelocity.magnitude;
 | 
						|
 | 
						|
        // Adjust the pitch based on speed (linear interpolation)
 | 
						|
        float pitch = Mathf.Lerp(minPitch, maxPitch, speed / maxSpeed);
 | 
						|
        pitch = Mathf.Clamp(pitch, minPitch, maxPitch);
 | 
						|
 | 
						|
        foreach (AudioSource audioSource in engineAudioSources)
 | 
						|
        {
 | 
						|
            if (audioSource != null)
 | 
						|
            {
 | 
						|
                audioSource.pitch = pitch;
 | 
						|
 | 
						|
                // Start playing the sound if not already playing
 | 
						|
                if (speed > 0.1f && !audioSource.isPlaying)
 | 
						|
                {
 | 
						|
                    audioSource.Play();
 | 
						|
                }
 | 
						|
                else if (speed <= 0.1f && audioSource.isPlaying)
 | 
						|
                {
 | 
						|
                    audioSource.Stop();  // Stop when the vehicle is idle
 | 
						|
                }
 | 
						|
            }
 | 
						|
        }
 | 
						|
    }
 | 
						|
}
 |