Home | Clases | Unity: Videojuego para 2 jugadores en 2D estilo Pong | Sonidos

Sonidos


Introducción

Lo sonidos del Pong original eran bastante sencillos, y se limitaban a 3 eventos:

  • Al marcar un gol
  • Al rebotar la pelota en una raqueta
  • Al rebotar la pelota en una pared


El siguiente video permite escuchar todos los sonidos originales:
Sonidos Pong originales


Puedes obtener los 3 sonidos, editados por mi desde el video anterior, descargándolos en este enlace.

Una vez descargados, descomprímelos, crea una nueva carpeta llamada Sounds dentro de Assets y arrastra los 3 archivos Gol.mp3, Raqueta.mp3 y Rebote.mp3.




Audio Source vs Audio Clip

En Unity, un Audio Source es una representación de un audio a reproducir o , dicho de otro modo, el objeto contenedor que reproducirá el archivo de audio o AudioClip.

En lenguaje llano, el Audio Source es el iPod con todo sus controles y el Audio Clip es el fichero mp3/m4a/wav/etc. que reproduces en el iPod.

Unity te permite crear diferentes Audio Sources para crear una mezcla y ambiente sonoro espectacular, pero dado que en este juego solo vamos a reproducir un sonido a la vez, nunca dos simultáneos, crearemos un único Audio Source y 3 Audio Clips, que asignaremos al Audio Source en cada momento.

Para crear el Audio Source, selecciona el objeto Bola de la Hierarchy window y, en la Inspector window > Add Component > Audio Source y desactiva Play On Awake, ya que no se debe reproducir nada al arrancar.




El Script Bola

Los 3 sonidos del juego se reproducirán desde el script Bola, si bien, al de los goles lo llamaremos desde el script Porteria, que es el que gestiona los goles.

Modifica el script Bola:


using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;

public class Bola : MonoBehaviour {

//Velocidad de la pelota
public float velocidad = 30.0f;

//Audio Source
AudioSource fuenteDeAudio;

//Clips de audio
public AudioClip audioGol, audioRaqueta, audioRebote;

//Contadores de goles
public int golesIzquierda = 0;
public int golesDerecha = 0;

//Cajas de texto de los contadores
public Text contadorIzquierda;
public Text contadorDerecha;

// Use this for initialization
void Start () {

//Velocidad inicial hacia la derecha
GetComponent<Rigidbody2D>().velocity = Vector2.right * velocidad;

//Recupero el componente audio source;
fuenteDeAudio = GetComponent<AudioSource>();

//Pongo los contadores a 0
contadorIzquierda.text = golesIzquierda.ToString();
contadorDerecha.text = golesDerecha.ToString();

}

//Se ejecuta si choco con la raqueta
void OnCollisionEnter2D(Collision2D micolision){

//Si me choco con la raqueta izquierda
if (micolision.gameObject.name == "Raqueta Izquierda"){

//Valor de x
int x = 1;

//Valor de y
int y = direccionY(transform.position, micolision.transform.position);

//Vector de dirección
Vector2 direccion = new Vector2(x, y);

//Aplico la velocidad a la bola
GetComponent<Rigidbody2D>().velocity = direccion * velocidad;

//Reproduzco el sonido de la raqueta
fuenteDeAudio.clip = audioRaqueta;
fuenteDeAudio.Play();

}
//Si me choco con la raqueta derecha
else if (micolision.gameObject.name == "Raqueta Derecha"){

//Valor de x
int x = -1;

//Valor de y
int y = direccionY(transform.position, micolision.transform.position);

//Vector de dirección
Vector2 direccion = new Vector2(x, y);

//Aplico la velocidad a la bola
GetComponent<Rigidbody2D>().velocity = direccion * velocidad;

//Reproduzco el sonido de la raqueta
fuenteDeAudio.clip = audioRaqueta;
fuenteDeAudio.Play();

}

//Para el sonido del rebote
if (micolision.gameObject.name == "Arriba" || micolision.gameObject.name == "Abajo"){

//Reproduzco el sonido del rebote
fuenteDeAudio.clip = audioRebote;
fuenteDeAudio.Play();

}

}

//Calculo la dirección de Y
int direccionY(Vector2 posicionBola, Vector2 posicionRaqueta){

if (posicionBola.y > posicionRaqueta.y){
return 1;
}
else if (posicionBola.y < posicionRaqueta.y){
return -1;
}
else{
return 0;
}

}

//Reinicio la posición de la bola
public void reiniciarBola(string direccion){

//Posición 0 de la bola
transform.position = Vector2.zero;
//Vector2.zero es lo mismo que new Vector2(0,0);

//Velocidad inicial de la bola
velocidad = 30;

//Velocidad y dirección
if (direccion == "Derecha"){
//Incremento goles al de la derecha
golesDerecha++;
//Lo escribo en el marcador
contadorDerecha.text = golesDerecha.ToString();
//Reinicio la bola
GetComponent<Rigidbody2D>().velocity = Vector2.right * velocidad;
//Vector2.right es lo mismo que new Vector2(1,0)
}
else if (direccion == "Izquierda"){
//Incremento goles al de la izquierda
golesIzquierda++;
//Lo escribo en el marcador
contadorIzquierda.text = golesIzquierda.ToString();
//Reinicio la bola
GetComponent<Rigidbody2D>().velocity = Vector2.left * velocidad;
//Vector2.right es lo mismo que new Vector2(-1,0)
}

//Reproduzco el sonido del gol
fuenteDeAudio.clip = audioGol;
fuenteDeAudio.Play();

}
}

Fecha de publicación: 22/10/2019
Asignaturas: realización de proyectos multimedia interactivosdesarrollo de entornos interactivos multidispositivo
Temas: Unity 2d Pong
Utilizamos cookies propias y de terceros para mejorar su experiencia en la navegación. Al seguir navegando entendemos que acepta su uso.
Si lo desea, consulte nuestras políticas de privacidad y cookies
ENTENDIDO
[X] Cerrar

Contacta conmigo


[X] Cerrar

Acceso alumnos