C# How to play a sound ONCE when the gameObject tagged as , "Player" enters the trigger ?

For some reason, I can’t seem to find an updated version of how to play a sound when the player enters the trigger. I read the manual and something doesn’t to seem to match up, heres my code.

using UnityEngine;
using System.Collections;

public class CollisionTrigger : MonoBehaviour {
    public AudioClip SoundToPlay;
    public float Volume;
   AudioSource audio;
    public bool alreadyPlayed = false;



	// Use this for initialization
	void Start () {
        audio.GetComponent<AudioSource>();
	}
	
	// Update is called once per frame
	void Update () {
        if(!alreadyPlayed)
        {
            audio.PlayOneShot(SoundToPlay, Volume);
            alreadyPlayed = true;

        }
	
	}
}

Hi @KUFgoddess,

From looking at your code, you don’t have a trigger in place. It would seem that CollisionTrigger would play the sound at the very start of your game, assuming that it is active when you press play. This is because in Update() you’re checking if !alreadyPlayed which or course it won’t be. This would mean that every first time Update is called, the audio will play and the bool will flip.

You’d need to add a collider to your CollisionTrigger GameObject and then check for a collision trigger between it and the player. Use something like the following, note the OnTrigger/CollisionEnter method needs to be outside of Update() or Start(), also please note I’m assuming that you have a script attached to your player character called Player.

using UnityEngine;
using System.Collections;
     
public class CollisionTrigger : MonoBehaviour {
    
         public AudioClip SoundToPlay;
         public float Volume;
         AudioSource audio;
         public bool alreadyPlayed = false;
     
     
     
         // Use this for initialization
         void Start () {
             audio.GetComponent<AudioSource>();
         }
         
         // Update is called once per frame
         void Update () {
            
         }

        //Occurs when there is a collision
         void OnTriggerEnter(Collider collider){
                   //Is the collision with a Player?
                   if(collider.GetComponent<Player>()){
                            if(!alreadyPlayed){
                                       audio.PlayOneShot(SoundToPlay, Volume);
                                       alreadyPlayed = true
                            }
                   }
        }
}

You should also be aware the these are for 3D games, there is a 2D alternative you’d need to use for 2D.

Check out the Unity Docs on OnTriggerEnter here:
3D:
Unity - Scripting API: MonoBehaviour.OnTriggerEnter(Collider) .

2D:

Also OnCollisionEnter here:
3D:
Unity - Scripting API: Collider.OnCollisionEnter(Collision) .

2D: