Archivi del mese: ottobre 2014

OLYMPUS DIGITAL CAMERA

Unity 3D – Come riprodurre un audio quando due oggetti si scontrano

 

E’ possibile generare un effetto sonoro quando due oggetti collidono fra loro in modo semplice.

esempio live

in questo esempio viene riprodotto un rumore quando la palla si scontra con un altro oggetto ( pavimento )

La classe MonoBehaviour, classe padre di ogni oggetto nella scena di unity3d, offre un intertessante metodo ( method ):

OnCollisionEnter(Collision)

OnCollisionEnter è chiamato dal framework quando l’oggetto ( con un collider/rigidbody ) ha cominciato a toccare un altro oggetto dotato di collider/rigidbody.

Il parametro passato Collision contiene informazioni utili sull’altro oggetto, il punto di collisione e altre utili informazioni come ad esempio la velocità di impatto.

Quello che interessa a noi è appunto la velocità di impatto, che la sfrutteremo nel seguente modo:

void OnCollisionEnter(Collision collision) {    
    if ( (collision.relativeVelocity.magnitude > 2) && (audio != null) )
       audio.Play();
}

Quindi se la velocità di impatto supererà il valore 2 verrà riprodotto l’audio attached all’oggetto.
Quindi è necessario che l’oggetto abbia uno script Audio associato.

Osservazioni:

  • Entrambi gli oggetti devono avere un component rigidbody/collider.
  • Se l’audio riprodotto vi sembra basso controllate le proprietà del file audio, molto probabilmente lo volete con proprietà 2D.
  • Regolate sempre il valore di confronto con il collision.relativeVelocity.magnitude ( nell’esempio è > 2 ) per evitare suoni non voluti.