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;
}
}
}
Answer by studioAdam · Nov 20, 2016 at 01:34 PM
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:
https://docs.unity3d.com/ScriptReference/MonoBehaviour.OnTriggerEnter.html .
2D:
https://docs.unity3d.com/ScriptReference/Collider2D.OnTriggerEnter2D.html
Also OnCollisionEnter here:
3D:
https://docs.unity3d.com/ScriptReference/Collider.OnCollisionEnter.html .
2D:
https://docs.unity3d.com/ScriptReference/Collider2D.OnCollisionEnter2D.html
Your answer
Follow this Question
Related Questions
Is there a way to check active audio snapshot 1 Answer
Script for Movie sound ontriggerenter in Unity 5 0 Answers
Sound doesn't always play 0 Answers