La música y sonidos es una parte importante de cualquier videojuego y no solo basta con añadirlo y reproducirlo. Unity3d incorpora el componente Audio Mixer que se encarga de controlar los diferentes canales de audio y nos permite configurar cada canal de forma separada. Para crear un Audio Mixer, hacemos clic derecho sobre un directorio de Assets donde nos interese guardarlo y elegimos “Create/AudioMixer”. Una vez creado, hacemos doble clic sobre él.
Figura 8.1. Audio Mixer con diferentes canales.
Cada vez que cambiamos de escena, todos los objetos de la nueva escena se cargan y el sonido no es ninguna excepción, por lo que se cortaría la música principal al pasar de escena. Para evitar ello, implementaremos un patrón singleton para la música principal como se muestra en la Figura 8.2.
Figura 8.2. Script que implementa un patrón singleton.
Creamos un GameObject vacío y le añadimos el script y un componente de tipo “Audio Source ” A este último componente le añadimos el fichero de audio en “AudioClip ” como salida elegimos el canal “music_background” del Mixer que hemos creado.
En el caso de los efectos de sonido no es necesario crear un singleton por lo que únicamente añadimos los “Audio Source” a cada objeto y los activamos desde los correspondientes scripts.
Figura 8.3. Componente Audio Souce y el script singleton.
9. Otras herramientas nativas de 2D enfocadas a las físicas.
Dado la temática de nuestro videojuego (o de cualquier otro videojuego) es muy difícil hacer uso en él de todas las funcionalidades de Unity3d enfocadas al desarrollo en 2D. Es por ello que dedicamos este último apartado del Anexo a comentar varias funcionalidades interesantes por medio de pequeños ejemplos.
9.1. Area Effector 2D y Point Effector 2D.
El Area Effector 2D aplica una fuerza a todos los GameObjects que están en un área.
Figura 9.1. Escena de Area Effector 2D
Para explicar esta funcionalidad, hemos creado la escena de la Figura 9.1. En esta escena una pelota amarilla cae y entra dentro del área (“Box Collider 2D”) de la fecha que apunta a la derecha. Al entrar dentro de esta área, el área le aplicará una fuerza hacia la derecha y la siguiente fecha le aplicará otra fuerza hacia arriba.
Figura 9.2. Componentes de la flecha.
En la Figura 9.2 se muestra los componentes de la flecha. Para que se active la fuerza, su “Box Collider 2D” debe estar marcada la opción “Is Trigger”, es decir, como disparador. Además de ello, también tiene que tener activado la opción “Used By Effector” junto con un componente Area Effector 2D. En este último componente configuraremos la fuerza a aplicar en el área y dispone de los siguientes parámetros a configurar:
- Collider Mask: Selecciona las capas permitidas para interactuar con el “Effector”.
- Force Direction: La dirección de la fuerza a ser aplicada.
- Force Magnitude: La magnitud de la fuerza a ser aplicada.
- Force Variation: La variación de la magnitud de la fuerza en ser aplicada.
- Drag: La fricción lineal que aplica a los “Rigidbody”.
- Angular Drag: La fricción angular angular drag) que aplica a los “Rigidbody”.
- Force Target: El objetivo donde el “Effector” aplica cualquier fuerza.
Figura 9.3. Fuerza que ejerce el área con Area Effect 2D sobre la pelota
Point Effector aplica una fuerza para atraer o repulsar un GameObject contra un punto. En este caso disponemos de la escena de la Figura 9.4 en la que una pelota cae sobre una seta que hará que la pelota rebote, es decir, aplicará una fuerza de repulsión a la pelota.
Figura 9.4. Escena de Area Effector 2D.
Nuevamente el GameObject de la seta dispone de un “Box Collider 2D” con las opciones “Is Trigger”, y “Used By Effector” activadas, con la diferencia que esta vez añadiremos un componente “Point Effector 2D” como se muestra en la Figura 9.5.
Figura 9.5. Componente Point Effector 2D.
Este componente dispone de los siguientes parámetros a configurar:
- Collider Mask: Selecciona las capas permitidas para interactuar con el “Effector”.
- Force Magnitude: La magnitud de la fuerza a ser aplicada.
- Force Variation La variación de la magnitud de la fuerza en ser aplicada.
- Drag: La fricción lineal que aplica a los “Rigidbody”.
- Angular Drag: La fricción angular angular drag) que aplica a los “Rigidbody”.
- Force Target: El objetivo donde el “Effector” aplica cualquier fuerza.
- Force Source: Punto centro del «Effector».
- Force Mode: El modo utilizado para aplicar la fuerza (constante, lineal, etc).
Figura 9.6. Fuerza que ejerce el área con Point Effector 2D sobre la pelota.
9.2 Creación de un material de físicas customizadas.
En los casos anteriores utilizando el “Effector” transmitimos una fuerza a los GameObject con los que colisionamos. En otros casos, nos puede interesar que un GameObject tenga un determinado comportamiento cuando colisione con otro GameObject y que no sea otros los que alteren su comportamiento. Para ello utilizamos un material de físicas customizado.
Figura 9.7. Escena de explicación de Physic 2D Material.
En la Figura 9.7 se muestra la escena que utilizaremos para crear un material de físicas customizadas mediante el componente “Physic 2D Material”. La pelota amarilla dispone de las físicas por defecto por lo que al colisionar con el suelo se posará sobre el automáticamente, sin embargo la pelota naranja dispone de un material de físicas customizado que rebotará contra el suelo como si fuese una pelota real como se muestra en la Figura 9.8.
Figura 9.8. Diferencias entre físicas por defecto y material de físicas customizado.
Para ello, dentro de «Assets» creamos una carpeta «Material» y sobre ella hacemos clic derecho y elegimos «Create/Physic2D Material» y en este caso lo nombramos como «Bouncy».
Figura 9.9. Parámetros del Physic 2D Material.
En la Figura 9.9 se muestra los parámetros del material de físicas, por una parte el coeficiente de fricción y por otra el grado de rebote sobre una superficie (un valor 1 sería un rebote perfecto sin pérdida de energía).
Figura 9.10. Circle Collider 2D con un Physic 2D Material.
Para añadirlo al GameObject de la pelota naranja, arrastramos el componente creado hacía el campo «Material» de su «Circle Collider 2D» (ó «Box Collider 2D») y ya dispondrá de este comportamiento.