Adjust audio based on Proximity

How can I adjust audio volume based on how close the player gets to a game object?

Please let me know. Thank you!

define your player’s distance from the object and tell it to play when he gets within range:

for instance… something like this would be attached to your game object. Make sure your game object has an audio source on it and a clip attached… otherwise assign a clip in code. I’ll do that here…

var playerDistance : float;
var gameAudio : AudioClip;
var canPlayAudio = true;

function Update() {

playerDistance = player.transform.position - transform.position;

if (playerDistance < 10) {
if (canPlayAudio) {
audio.clip = gameAudio;
audio.volume = 0.5; // adjust the volume to whatever you want
audio.Play();
canPlayAudio = false;  // you can reset this in your code elsewhere... I did this just to make sure the audio only plays once.
}
}
}

Well, that’s the point of a 3D sound. Sounds quite when far from the listener and loud when next to it.
But, if you want to do this by script you can add a script to the gameobject which has an audio source and do some coding like:

C# code:

    public Transform target;
    
    void Start () {
    
    StartCoroutine(AdjustVolume());
    
    }
    
    IEnumerator AdjustVolume () {
    
    while(true) {

if(audio.isPlaying) { // do this only if some audio is being played in this gameObject's AudioSource

    float distanceToTarget = Vector3.Distance(transform.position, target.position); // Assuming that the target is the player or the audio listener
    
    if(distanceToTarget < 1) { distanceToTarget = 1; }
    
    audio.volume = 1/distanceToTarget; // this works as a linear function, while the 3D sound works like a logarithmic function, so the effect will be a little different (correct me if I'm wrong)
    
    yield return new WaitForSeconds(1); // this will adjust the volume based on distance every 1 second (Obviously, You can reduce this to a lower value if you want more updates per second)
    
    }
    }
    
    }