Reproducir sonidos de perder vida y game over
Clase 27 de 29 • Curso de Producción de Audio para Videojuegos
Abre el proyecto de Platzi Puzzle en Unity.
En la parte de arriba del lado izquierdo de la pantalla, haz clic sobre el “GameManager” del SampleScene:
Lleva el mouse sobre la ruedita con flecha hacia abajo que queda en el lado derecho de la pantalla, en la sección de “Game Manager (Script), y haz clic sobre esta:
Haz clic sobre la opción de “Edit script”:
z
Esto te llevará al Visual Studio y abrirá la ventana del código del “GameManager.cs”:
using UnityEngine.Audio; Así quedan las primeras 6 líneas del código: using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; using UnityEngine.SceneManagement; using UnityEngine.Audio; // es importante agregar este último para el Audio Engine de Unity //Luego de la línea 24 del código “public AudioClip[] collectableClips;”, agrega el siguiente código: public AudioClip clip; //clip para lanzar el sonido de perder vida public AudioClip clip2; // clip para lanzar el sonido game over //Así quedan las líneas de código de la 10 a la 26: public class GameManager : MonoBehaviour{ public static GameManager instance = null; public bool playerMovement = true; public Text lifesText; public Text pointsText; public Text highScoreText; public Text lastScoreText; public GameObject player; public Transform SpawnPoint; public GameObject finalPortal; public GameObject gameOverPanel; public GameObject fadePanel; public int itemsPerLevel; public AudioClip[] collectableClips; public AudioClip clip; //clip para lanzar el sonido de perder vida public AudioClip clip2; // clip para lanzar el sonido game over //Luego de la línea 92 “KillPlayer();”, debes agregar la siguiente línea de código: MusicController.instance.StartCoroutine("playEventMusic", clip); // Esto pide que se lance el Coroutine que reproduce el sonido de perder vida //Luego de la línea 98 “FinishGame();”, debes agregar la siguiente línea de código: MusicController.instance.StartCoroutine("playEventMusicThenRestart", clip2); // Esto pide que se lance el Coroutine que reproduce el sonido de Game Over // Estos dos Coroutines estarán en un script dentro de la Main Camera // llamado MusicController.cs que crearemos en el siguiente paso //(Nota: el MusicController lo crearemos a continuación, en la sección Creando “MusicController.cs” //Así quedan las líneas de código de la 86 a la 104: public void LoseLife(){ if(points>10){ points -= 10; } if(playerLifes>1){ playerLifes--; KillPlayer(); MusicController.instance.StartCoroutine("playEventMusic", clip); // Esto pide que se lance el Coroutine que reproduce el sonido de perder vida Invoke("SpawnPlayer", 1f); }else{ playerLifes = 0; FinishGame(); MusicController.instance.StartCoroutine("playEventMusicThenRestart", clip2); // Esto pide que se lance el Coroutine que reproduce el sonido de Game Over // Estos dos Coroutines estarán en un script dentro de la Main Camera // llamado MusicController.cs que crearemos } }
Una vez tienes estas líneas de código en el “GameManager.cs”, vuelve a Unity sin cerrar el Visual Studio, para continuar con el siguiente paso, creando el “MusicController.cs”.
Creando el “MusicController.cs”
En Unity, en la parte de arriba del lado izquierdo de la pantalla, haz clic sobre el Main Camera del SampleScene:
En la parte de abajo del lado derecho de la pantalla, haz clic en el botón de “Add Component”:
Escribe la palabra “MusicController”, y haz clic sobre New script:
Haz clic sobre “Create and Add”:
Luego de hacer clic en “Create and Add”, tiene creado el “Music Controller (Script)”. Lleva el mouse a la ruedita con la flecha hacia abajo del lado izquierdo y haz clic sobre ella:
Haz clic sobre la opción de “Edit script”:
Esto te llevará al Visual Studio y abrirá la ventana del código del “MusicController.cs”:
En el Visual Studio encontrarás el siguiente código cuando se el “MusicController.cs”:
using System.Collections; using System.Collections.Generic; using UnityEngine; public class MusicController : MonoBehaviour { // Use this for initialization void Start () { } // Update is called once per frame void Update () { } } // Debes modificar el código del “MusicController.cs” de la siguiente manera (los comentarios de código, para que sea más fácil // de entender lo que estás haciendo, están en //gris): using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.Audio; // es importante agregar este último para el Audio Engine de Unity public class MusicController : MonoBehaviour { public static MusicController instance; public AudioSource defaultMusic; public AudioSource killedMusic; public AudioSource gameoverMusic; public AudioMixerSnapshot killed; public AudioMixerSnapshot gameover; public AudioMixerSnapshot music; // declaramos los audiosource para cada tipo de evento. Default, perder vida y game over // así mismo, declaramos el snapshot para cada uno. Los snapshots aprendimos a crear previamente private void Awake() { if(instance != null) { Destroy(gameObject); } instance = this; // esto es para cada vez que llamas el Coroutine desde el Game Manager } public IEnumerator playEventMusic(AudioClip clip) // perder vida { killed.TransitionTo(0.05f); //cambio de snapshot en 0.05 segundos yield return new WaitForSeconds(0.2f); // esperar 0.2 segundos. Ambos valores se pueden modificar killedMusic.clip = clip; killedMusic.Play(); // esto reproduce el clip indicado en el Game Manager while(killedMusic.isPlaying) { yield return null; } music.TransitionTo(0.05f); // al terminar, se vuelve al snapshot general de la música en 0.05 segundos yield break; } public IEnumerator playEventMusicThenRestart(AudioClip clip) // gameover { gameover.TransitionTo(0.05f); yield return new WaitForSeconds(0.2f); defaultMusic.Stop(); // esto hace que la música principal pare de sonar gameoverMusic.clip = clip; gameoverMusic.Play(); while (gameoverMusic.isPlaying) { yield return null; } music.TransitionTo(0.05f); yield return new WaitForSeconds(0.2f); defaultMusic.Play(); // termina el game over, se espera un momento, y se cambia al snapshot principal y // se le da play de nuevo a la música. yield break; } }
Luego de escribir todo este código (el cual puedes copiar y pegar en Visual Studio) tendrás todo el código que necesitas para que funcionen los snapshots, lo cual permitirá que se activen el sonido de muerte y game over.
Debug en Visual Studio
En Visual Studio haz clic sobre la flecha de play para hacer un Debug, así nos aseguraremos que el código no tiene errores:
Luego de un tiempo, que ya haya terminado de hacer el Debug y que no te hayan salido ningún error, haz clic sobre el cuadrado para para el Debug:
Así ya estamos seguros que el código corre bien y no hay ningún error. Ya puedes cerrar el Visual Studio, si te pide que guardes cambios, hazlo y vuelve al proyecto en Unity.
Últimos ajustes en Unity
El proyecto puede quedarse pensando un tiempo mientras los ajustes que hiciste en el código se hacen efectivos. Una vez para de pensar el computador, haz clic sobre el “GameManager” del SampleScene:
Ahora en la sección de “Game Manager (Script) podrás observar en la parte de abajo que ahora se encuentran “Clip” y “Clip2”, los cuales creaste en el código:
Para escoger el audio de “Clip”, haz clic en el círculo que se encuentra en el extremo derecho de este, luego del texto de “None (Audio Clip”):
Haz clic sobre el sonido de “Muerte” (o elije el que quieras para este sonido):
Para escoger el audio de “Clip 2”, haz clic en el círculo que se encuentra en el extremo derecho de este, luego del texto de “None (Audio Clip”):
Haz clic sobre el sonido de “GameOver” (o el elije el que quieras para este sonido):
En Unity, en la parte de arriba del lado izquierdo de la pantalla, haz clic sobre “Main Camera” del SampleScene:
Luego de hacer clic sobre “Main Camera”, en la parte de abajo del lado derecho de la pantalla, encontrarás el “Music Controller (Script)”, con los distintos “sources” y “snapshots” que creaste en el código:
De la misma manera que hiciste para los dos clips anteriores, haz clic en el círculo que se encuentra en el extremo derecho de “Default Music” y en la ventana que aparece haz clic sobre “Platzi Puzzle Música (loop) o sobre el “AudioSource” de la música de tu proyecto:
Para “Killed Music” haz clic sobre el círculo de la misma manera que para hiciste “Default Music” y en la ventana que aparece haz clic sobre “killed” o sobre el “AudioSource” del sonido de muerte de tu proyecto:
Para “Gameover” haz clic sobre el círculo de la misma manera que hiciste para “Killed” y en la ventana que aparece haz clic sobre “killed” o sobre el “Snapshot” que creaste para el sonido de muerte de tu proyecto:
Para “Music” haz clic sobre el círculo de la misma manera que hiciste para “Killed” y “Gameover”, y en la ventana que aparece haz clic sobre “Snapshot” o sobre el “Snapshot” que creaste como el principal de tu proyecto:
Luego de haber seleccionado todas las fuentes de audio y “Snapshots”, el “Music Controller (Script) se debe ver así:
Debes asegurarte que en el “Snapshot” principal, el fader de “killed” y de “gameover” estén en -80 dB:
Luego de haber completado estos pasos, estás listo para jugar Platzi Puzzle y ver cómo funciona el juego con el sonido de muerte y game over. Puedes hacer ajustes de volumen de tus “Snapshots” y en los tiempos del código el cual los activa.
Pasos adicionales
Así como aprendimos a hacer masterización de audio utilizando plugins como compresores, podemos colocar uno en nuestro “Master”, para esto haz clic en la parte de abajo del canal del “Master”, donde dice “Add..”:
Del menú que se despliega escoge “Compressor”:
En el “Inspector” del “Master”, el cual aparece en el lado izquierdo de la pantalla puedes ajustar el “Threshold”, “Attack”, “Release” y el “Make up gain” de una manera similar que los compresores de los DAW’s.
Aquí pueden ver qué ajustes le hice al compresor para lograr el volumen final que quería para Platzi Puzzle:
Cuando ya tienes tu versión Platzi Puzzle con todos los elementos deseados, el último paso es crear un ejecutable de tu juego, para esto haz clic en el menú de “File” y escoge la opción de “Build Settings…”:
Desde esta ventana puedes escoger para qué plataformas vas a crear tu ejecutable, así como cuál va a ser el método de compression:
Usualmente la compresión “Default” va a resultar en el ejecutable más pequeño en tamaño, mientras que la compresión “LZ4HC” usualmente es más grande en tamaño, pero un “build” más estable y lo recomiendan para los “builds” finales de un juego:
Haz clic en “Build” y comparte tu ejecutable para que otros puedan jugar y ver cómo quedó tu versión de Platzi Puzzle.
¡Muchas gracias!