Sonido
Tutorial
·
Beginner
·
+0XP
·
30 mins
·
(148)
Unity Technologies

Ahora estás listo para agregar los toques finales para tu juego con un sonido cautivante.
En este tutorial vas a:
- explorar los diferentes tipos de sonido que pueden usarse en un juego;
- agregar una pista de sonido y una variedad de efectos de sonido;
- escribir un script para controlar el uso de sonido en tu juego.
Una vez que hayas terminado este tutorial tu juego estará completo y estarás listo para hacer una generación final de tu juego.
Languages available:
1. Sonido
Llenaste tu nivel con enemigos para hacer que el escape de John Lemon sea un reto, pero cuando testeaste el juego, el ambiente era silencioso. En este tutorial vas a agregarle los toques finales a tu juego con un rango de sonidos tenebrosos para mejorar el entorno.
Hay dos tipos de sonido que usarás en este tutorial:
- Sonido no diegético o extradiegético, el mismo que no tiene una fuente identificable (por ejemplo, una pista de audio);
- Sonido diegético, el mismo que tiene una fuente identificable (por ejemplo, el sonido de una pistola al disparar).
Vamos a empezar añadiendo sonido no-diegético a tu juego.
2. Un manual básico sobre el sonido en Unity
Antes de empezar a agregar sonido a tu juego, vamos a explorar muy rápidamente cómo funciona el sonido en Unity. Hay tres partes principales: Audio Clips (Clips de sonido), Audio Sources (Fuentes de sonido) y Audio Listener (Receptor de sonido).
- Los Audio Clips o Clips de sonido son recursos o Assets como los MP3s que contienen todos los datos específicos a un sonido en particular.
- Las Audio Sources o Fuentes de sonido son componentes que actúan como el origen de un sonido en el mundo del juego. La mayoría de las cosas que hacen sonido en un juego deben tener un componente Audio Source de tal manera que el sonido tenga una locación.
- El Audio Listener o Receptor de sonido es un solo componente en una escena que trabajo como los oídos virtuales del jugador (de la misma manera que el componente Camera trabaja como los ojos virtuales del jugador). Por defecto, el componente Audio Listener está en la cámara principal o Main Camera.
Todos estos elementos diferentes generalmente trabajan juntos de la siguiente manera: una fuente de sonido o Audio Source toca un clip de sonido o Audio Clip y si el receptor de audio o Audio Listener está cerca de la fuente de audio, el sonido se escucha.
La mezcla espacial o spatial blend de una fuente de audio específica determina si suena como si estuviera viniendo desde un punto específico en el mundo del juego o si el volumen es alto sin que importe la distancia entre la fuente y el receptor de sonido.
Vas a comenzar con sonido no-diegético. Desde que este sonido no tiene un origen su mezcla espacial o spatial blend está configurada a 2D. Cuando la mezcla está configurada a ser solo 2D, la distancia entre la fuente de sonido y el receptor no afecta el volumen. Se llama 2D porque todavía puede hacer una panorámica hacia la izquierda y la derecha usando la configuración Stereo Pan. Si la mezcla espacial de una fuente de fuente de sonido está configurada solo a 3D, el volumen variará con la distancia al receptor de sonido o audio listener. Los valores entre 2D y 3D harán que la fuerza de este efecto varíe.
3. ¿Qué es el sonido no diegético o extradiegético?
El sonido no diegético o sonido extradiegético (el sonido sin una fuente identificable) puede tener un gran impacto en tu juego y la experiencia de los jugadores. Considera los juegos que has disfrutado jugar y cómo usan los sonidos para crear un ambiente específico—¿Cómo te sientes cuando los escuchas? ¿Qué tienen que los hace muy efectivos?
Vas a agregar tres sonidos extradiegéticos a tu juego:
- Una pista de sonido que va a tocarse en sucesión y dará un ambiente general a la casa embrujada.
- Un efecto de sonido que se toca cuando se captura a John Lemon.
- Un efecto de sonido que se toca cuando John Lemon escapa.
4. ¿Cómo se crea fuentes de sonido para tu juego?
Primero, vamos a crear fuentes de sonido para tu juego:
1. En la ventana Hierarchy, haz clic en el menú Create y selecciona Create Empty (Crear uno vacío). Cámbiale el nombre del GameObject a «Ambient» (ambiente).
2. En el Inspector, configura la posición de Ambient a (0, 0, 0).
La posición del GameObject realmente no importa ya que el volumen del sonido será el mismo donde sea que esté. Sin embargo, siempre ayuda mantener tus GameObjects organizados por posición en caso de que esto sea importante luego.
3. Luego, necesitas agregar un componente Audio Source of fuente de sonido. Normalmente lo harías con el botón Add Component (Añadir componente), pero cuando también quieras asignarle un Audio Clip o clip de sonido, hay una combinación rápida que puedes usar.
En la ventana Project ve a Assets > Audio. Arrastra el Audio Clip SFXHouseAmbience desde la ventana Project a la venta Inspector para crear un componente Audio Source y asignarlo automáticamente como el AudioClip.
4. La propiedad Spatial Blend ya ha sido totalmente configurada a 2D, por lo tanto, no necesitas cambiarla. Play On Awake también ha sido habilitada por defecto. Esto significa que tan pronto como empiece el nivel, empezará a tocarse el sonido
5. No obstante, va a parar por defecto después de que haya hecho una revolución completa. Habilita la casilla Loop para que la pista de sonido de tu juego toque sin parar.
6. Ahora tu casa embrujada tiene unos sonidos tenebrosos de fondo. Entra en el modo Play y asegúrate del que el sonido esté funcionando adecuadamente.
7. Deberías escuchar el sonido, pero es un poco alto comparado con los otros sonidos que vas a agregar a través de este tutorial. Sale del modo Play para que puedas ajustarlo.
8. En el Inspector, configura la propiedad Volume (volumen) del componente Audio Source a 0,5.
5. ¿Cómo se puede duplicar una fuente de sonido?
En vez de repetir este proceso para los dos efectos de sonido de cierre, vamos a ser más eficientes y vamos a duplicar los GameObject y luego vamos a cambiar las configuraciones como se necesite.
1. En la ventana Hierarchy, selecciona el GameObject Ambient. Duplícalo dos veces con la combinación rápida Ctrl + D (Windows) o CMD + D (macOS). Cámbiale el nombre a la primera copia a «Escape» y el de la segunda a «Caught».
2. La única diferencia entre estos efectos de sonido es el AudioClip que se usa, pero las configuraciones son las mismas.
En la ventana Hierarchy, pulsa la tecla Ctrl (Windows) o CMD (macOS) y haz clic en los GameObjects Escape y Caught. Esto te permite editarlos juntos.
3. Estos sonidos no deberían tocarse enseguida o sin parar. También necesitan oírse sobre los otros sonidos del juego; por lo tanto, deberían ser más altos que el sonido ambiental.
Con los GameObjects Escape y Caught seleccionados:
- deshabilita la casilla Play on Awake;
- deshabilita la casilla Loop;
- configura el valor de Volume a 1.
Ya que has ajustado las configuraciones comunes, puedes configurar el AudioClip de cada uno.
4. Selecciona el GameObject Caught y configura el AudioClip para su componente AudioSource a SFXWin arrastrándolo desde la ventana Project o usando el botón de selección circular.
5. Selecciona el GameObject Escape y configura el AudioClip para su componente AudioSource a SFXGameOver arrastrándola desde la ventana Project o usando el botón de selección circular.
Acabas de configurar tus fuentes de sonido extradiegéticas, pero antes de que continúes a la implementación de los sonidos Escape y Caught, vamos a ordenar las fuentes de sonido bajo un solo padre jerárquico.
6. ¿Cómo se organiza las fuentes de sonido?
Para organizar las fuentes de sonido:
1. En la ventana Hierarchy, crea un GameObject vacío. Cámbiale el nombre a «Audio».
2. Selecciona los GameObjects Ambient, Escape y Caught en la ventana Hierarchy pulsando Ctrl (Windows) o CMD (macOS) y haciendo clic en cada uno de ellos.
3. Arrastra los GameObject seleccionados al GameObject Audio para convertirlo en su padre jerárquico.
7. Regresa al script GameEnding
Ya que has organizado tus cosas, vamos a seguir implementando los sonidos de fin de juego en el script GameEnding.
En la ventana Project, abre la carpeta Assets > Scripts y haz clic doble en el script GameEnding para abrirlo y editarlo.
La última vez que trabajaste con el script GameEnding, quedó así:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.SceneManagement;
public class GameEnding : MonoBehaviour
{
public float fadeDuration = 1f;
public float displayImageDuration = 1f;
public GameObject player;
public CanvasGroup exitBackgroundImageCanvasGroup;
public CanvasGroup caughtBackgroundImageCanvasGroup;
bool m_IsPlayerAtExit;
bool m_IsPlayerCaught;
float m_Timer;
void OnTriggerEnter (Collider other)
{
if (other.gameObject == player)
{
m_IsPlayerAtExit = true;
}
}
public void CaughtPlayer ()
{
m_IsPlayerCaught = true;
}
void Update ()
{
if (m_IsPlayerAtExit)
{
EndLevel (exitBackgroundImageCanvasGroup, false);
}
else if (m_IsPlayerCaught)
{
EndLevel (caughtBackgroundImageCanvasGroup, true);
}
}
void EndLevel (CanvasGroup imageCanvasGroup, bool doRestart)
{
m_Timer += Time.deltaTime;
imageCanvasGroup.alpha = m_Timer / fadeDuration;
if (m_Timer > fadeDuration + displayImageDuration)
{
if (doRestart)
{
SceneManager.LoadScene (0);
}
else
{
Application.Quit ();
}
}
}
}
8. Actualiza tu script GameEnding para que toque sonidos
Necesitas agregar la funcionalidad de tocar una fuente de sonido cuando el método EndLevel se invoque. Hay dos fuentes de sonido distintas que pueden tocarse; por lo tanto, necesitarás una referencia para cada una. Recuerda, el método EndLevel se invoca en cada marco en Update. No quieres que la fuente de sonido siga tocándose; por ende, necesitas una manera de pararlo después de que toque por primera vez.
Vamos a comenzar agregando las referencias a las fuentes de audio:
1. Debajo de la declaración de la variable exitBackgroundImageCanvasGroup, agrega el siguiente código:
public AudioSource exitAudio;
2. Tus invocaciones a EndLevel ya no tendrán los parámetros correctos que se le hayan pasado; ahora también necesitan un AudioSource o fuente de sonido también. Cambia la primera invocación al método EndLevel a lo siguiente:
public AudioSource caughtAudio;
3. Luego, necesitas crear una variable para asegurarte de que el sonido se toque una sola vez. Una variable tipo bool será false o falsa por defecto. Cuando quieras que se toque el sonido puedes marcar «it’s false» y tocar el sonido y ponerlo a «it’s true» una vez que lo haya hecho.
Debajo de la declaración de la variable m_Timer, agrega lo siguiente:
bool m_HasAudioPlayed;
9. ¿Cómo se ajusta tu método para que use las nuevas variables?
Ahora, vamos a usar estas variables:
1. Desde que el juego debería tocar una fuente de sonido diferente dependiendo si se ha atrapado a John Lemon o si ha escapado, necesitas agregar otro parámetro para el método EndLevel. Cambia la firma del método EndLevel a lo siguiente:
void EndLevel (CanvasGroup imageCanvasGroup, bool doRestart, AudioSource audioSource)
2. Tus invocaciones a EndLevel ya no tendrán los parámetros correctos que se le hayan pasado; ahora también necesitan un AudioSource o fuente de sonido también. Cambia la primera invocación al método EndLevel a lo siguiente:
EndLevel (exitBackgroundImageCanvasGroup, false, exitAudio);
3. Cambia la segunda invocación al método EndLevel a lo siguiente:
EndLevel (caughtBackgroundImageCanvasGroup, true, caughtAudio);
Las invocaciones al método son correctas nuevamente, pero actualmente tu método EndLevel no hace nada con este nuevo parámetro.
10. ¿Cómo asegurarse de que los sonidos solo se toquen una vez?
El sonido solo debe tocarse sin que importe cuanto tiempo haya pasado en el cronómetro; por lo tanto, tiene sentido que el código que se refiere al sonido esté al principio del método. Solo quieres que el sonido se toque si no se ha tocado antes; por ende, necesitas ponerlo dentro de una sentencia condicional IF que verifique si ha ocurrido o no.
1. Agrega lo siguiente al comienzo del método EndLevel:
if(!m_HasAudioPlayed)
{
}
El símbolo de exclamación niega lo que sea que esté a su derecha. Eso significa que el código dentro de la sentencia condicional IF solo será ejecutada si el sonido no se ha tocado.
2. Lo primero que necesitas hacer con esta sentencia condicional IF es tocar el sonido. Para tocar el Audio Clip o clip de sonido que ha sigo asignado a una fuente de sonido o Audio Source, invoca el método Play de la fuente de sonido así:
audioSource.Play();
3. Porque solo quieres que el sonido se toque una sola vez, necesitas configurar el valor de m_HasAudioPlayed a true o verdadero. Esto significa que el código dentro de la sentencia condicional IF no se invoca nuevamente. Dentro de la sentencia condicional IF, debajo de la invocación al método Play, añade lo siguiente:
m_HasAudioPlayed = true;
5. Acabas de editar el script GameEnding. Debería verse así:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.SceneManagement;
public class GameEnding : MonoBehaviour
{
public float fadeDuration = 1f;
public float displayImageDuration = 1f;
public GameObject player;
public CanvasGroup exitBackgroundImageCanvasGroup;
public AudioSource exitAudio;
public CanvasGroup caughtBackgroundImageCanvasGroup;
public AudioSource caughtAudio;
bool m_IsPlayerAtExit;
bool m_IsPlayerCaught;
float m_Timer;
bool m_HasAudioPlayed;
void OnTriggerEnter (Collider other)
{
if (other.gameObject == player)
{
m_IsPlayerAtExit = true;
}
}
public void CaughtPlayer ()
{
m_IsPlayerCaught = true;
}
void Update ()
{
if (m_IsPlayerAtExit)
{
EndLevel (exitBackgroundImageCanvasGroup, false, exitAudio);
}
else if (m_IsPlayerCaught)
{
EndLevel (caughtBackgroundImageCanvasGroup, true, caughtAudio);
}
}
void EndLevel (CanvasGroup imageCanvasGroup, bool doRestart, AudioSource audioSource)
{
if (!m_HasAudioPlayed)
{
audioSource.Play();
m_HasAudioPlayed = true;
}
m_Timer += Time.deltaTime;
imageCanvasGroup.alpha = m_Timer / fadeDuration;
if (m_Timer > fadeDuration + displayImageDuration)
{
if (doRestart)
{
SceneManager.LoadScene (0);
}
else
{
Application.Quit ();
}
}
}
}
5. Guarda el script y regresa a Unity.
6. El último paso es configurar las referencias que agregaste al script GameEnding. En la ventana Hierarchy, selecciona el GameObject GameEnding.
7. En el Inspector, usa el botón de selección circular para configurar el campo Exit Audio a Escape y el campo Caught Audio a Caught.
¡Eso es todo! Acabas de terminar de configurar el sonido extradiegético.
11. ¿Cómo se agrega el sonido de los pasos?
Ahora necesitas implementar el sonido donde puedas identificar la fuente. Vamos a comenzar con los pasos:
1. En la ventana Hierarchy, selecciona el GameObject JohnLemon.
2. En el Inspector, agrega un componente AudioSource.
3. Usa el botón circular de selección para configurar la propiedad AudioClip a SFXFootstepsLooping.
4. A pesar de ser un sonido diegético, aún deberías usar una mezcla espacial o Spatial Blend de 2D, de esa manera el volumen no varíe a medida que JohnLemon se mueva. La configuración por defecto funciona bien aquí.
5. No quieres que el sonido se toque tan pronto como comience la escena, ya que JohnLemon empieza la escena en una posición estacionaria. Deshabilita la casilla Play On Awake.
6. Lo que sí necesitas es que el sonido continúe tocándose hasta que le digas que pare, para eso necesitas hacer un loop. Habilita la casilla Loop.
Tal como lo hiciste antes, ahora necesitas editar un script para que puedas tocar el sonido cuando quieras.
12. Regresa a tu script PlayerMovement
Para habilitar el sonido de los pasos vas a editar tu script PlayerMovement. Haz doble clic en la propiedad Script del componente PlayerMovement para abrir el script para edición.
La última vez que trabajaste con el script PlayerMovemente, se veía así:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class PlayerMovement : MonoBehaviour
{
public float turnSpeed = 20f;
Animator m_Animator;
Rigidbody m_Rigidbody;
Vector3 m_Movement;
Quaternion m_Rotation = Quaternion.identity;
void Start ()
{
m_Animator = GetComponent<Animator> ();
m_Rigidbody = GetComponent<Rigidbody> ();
}
void FixedUpdate ()
{
float horizontal = Input.GetAxis ("Horizontal");
float vertical = Input.GetAxis ("Vertical");
m_Movement.Set(horizontal, 0f, vertical);
m_Movement.Normalize ();
bool hasHorizontalInput = !Mathf.Approximately (horizontal, 0f);
bool hasVerticalInput = !Mathf.Approximately (vertical, 0f);
bool isWalking = hasHorizontalInput || hasVerticalInput;
m_Animator.SetBool ("IsWalking", isWalking);
Vector3 desiredForward = Vector3.RotateTowards (transform.forward, m_Movement, turnSpeed * Time.deltaTime, 0f);
m_Rotation = Quaternion.LookRotation (desiredForward);
}
void OnAnimatorMove ()
{
m_Rigidbody.MovePosition (m_Rigidbody.position + m_Movement * m_Animator.deltaPosition.magnitude);
m_Rigidbody.MoveRotation (m_Rotation);
}
}
13. Actualiza tu script PlayerMovement para que toque sonido
Ahora necesitas editar tu script para que los pasos se escuchen cuando JohnLemon esté caminando y para que paren cuando no se esté moviendo.
Lo primero que necesitas es una referencia al componente Audio Source que acabas de añadirle a JohnLemon.
1. Debajo de la declaración de variable m_Rigidbody agrega el código siguiente:
AudioSource m_AudioSource;
Desde que esta no es una variable pública, no podrás asignarla en la ventana Inspector. Al contrario, tendrás que hacerlo a través del código como lo hiciste con los componentes Animator y Rigidbody.
1. En el método Start, después de la asignación de las referencias de las variables m_Animator y m_Rigidbody, agrega el siguiente código:
m_AudioSource = GetComponent<AudioSource>();
¡Eso es todo! Luego necesitas usar esta referencia para el componente Audio Source.
14. Ajusta tu método para que use las nuevas variables
Afortunadamente ya has creado una variable in el método FixedUpdate llamado isWalking. Esto va a funcionar perfectamente para reproducir y parar el sonido de los pasos:
1. Debajo de la invocación al método SetBool en el componente Animator, agrega la siguiente sentencia condicional IF:
if(isWalking)
{
}
else
{
}
Ahora puedes invocar Play en la fuente de sonido si isWalking es true o verdadero y Stop en la fuente de sonido si es false o falso.
2. No quieres continuar invocando Play en cada marco, solo quieres hacerlo si la fuente de audio o Audio Source no se está tocando. Para asegurarte de que esto no pase en cada marco, agrega la siguiente sentencia condicional IF dentro de la otra que acabas de agregar:
if(!m_AudioSource.isPlaying)
{
}
3. Ahora agrega la invocación al método Play a la sentencia condicional IF:
m_AudioSource.Play ();
4. Para que la fuente de sonido o Audio Source pare de tocar, agrega el código siguiente a la sentencia condicional IF:
m_AudioSource.Stop ();
5. Verifica que tu script completo PlayerMovement se vea así:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class PlayerMovement : MonoBehaviour
{
public float turnSpeed = 20f;
Animator m_Animator;
Rigidbody m_Rigidbody;
AudioSource m_AudioSource;
Vector3 m_Movement;
Quaternion m_Rotation = Quaternion.identity;
void Start ()
{
m_Animator = GetComponent<Animator> ();
m_Rigidbody = GetComponent<Rigidbody> ();
m_AudioSource = GetComponent<AudioSource> ();
}
void FixedUpdate ()
{
float horizontal = Input.GetAxis ("Horizontal");
float vertical = Input.GetAxis ("Vertical");
m_Movement.Set(horizontal, 0f, vertical);
m_Movement.Normalize ();
bool hasHorizontalInput = !Mathf.Approximately (horizontal, 0f);
bool hasVerticalInput = !Mathf.Approximately (vertical, 0f);
bool isWalking = hasHorizontalInput || hasVerticalInput;
m_Animator.SetBool ("IsWalking", isWalking);
if (isWalking)
{
if (!m_AudioSource.isPlaying)
{
m_AudioSource.Play();
}
}
else
{
m_AudioSource.Stop ();
}
Vector3 desiredForward = Vector3.RotateTowards (transform.forward, m_Movement, turnSpeed * Time.deltaTime, 0f);
m_Rotation = Quaternion.LookRotation (desiredForward);
}
void OnAnimatorMove ()
{
m_Rigidbody.MovePosition (m_Rigidbody.position + m_Movement * m_Animator.deltaPosition.magnitude);
m_Rigidbody.MoveRotation (m_Rotation);
}
}
6. Guarda el script y regresa a Unity.
15. ¿Cómo se integra el Audio Listener a JohnLemon?
El último elemento de sonido para tu juego son los sonidos tenebrosos que producen los fantasmas a medida que pasan. Esto no solo desarrollará el ambiente, sino que también ayudará a que el jugador identifique cuán cerca está el peligro.
Un reto es que los fantasmas no hacen más ruido a pesar de que estén más cerca a JohnLemon, en todo caso harán más ruido si están más cerca a la cámara. Esto se debe a que el receptor de sonido o Audio Listener está en la cámara principal o Main Camera por defecto. El primer paso es cambiar esto.
Para integrar el componente Audio Listener al GameObject JohnLemon:
1. En Hierarchy, selecciona el GameObject Main Camera.
2. En el Inspector, haz clic en el menú contextual del componente Audio Listener y selecciona Remove component (Eliminar componente).

3. En Hierarchy, selecciona el GameObject JohnLemon.
4. En el Inspector, agrega el componente Audio Listener a JohnLemon.
16. ¿Cómo se actualiza el Prefab JohnLemon?
Los cambios que has realizado a JohnLemon en este tutorial han sido hechos en un ejemplo del prefab JohnLemon.
Los nuevos componentes que has agregado tienen un + sobre su icono para mostrar que han sido agregados en el ejemplo del Prefab. Si hicieras otro ejemplo del prefab JohnLemon, estos componentes de sonido no estarían allí.
Puedes ajustar esto aplicando estos cambios al Prefab JohnLemon:
1. En Hierarchy, selecciona el GameObject JohnLemon.
2. En el Inspector ubica el menú desplegable Overrides en la parte superior de la ventana.
El menú desplegable Overrides te muestra todas las maneras en la que un ejemplo de JohnLeon se diferencia del Prefab JohnLemon.
3. Haz clic en el menú desplegable para poder ver los cambios.

Has agregado dos componentes: Una fuente de sonido o Audio Source y un receptor de sonido o Audio Listener. Vamos a hacer estos cambios parte del Prefab JohnLemon.
4. Haz clic en el botón Apply All (aplicar todo) del menú desplegable Overrides.
17. ¿Cómo se agrega una fuente de sonido para los fantasmas?
Ahora que el Prefab JOhnLemon tiene un receptor de sonido o Audio Listener, todos los sonidos de los fantamsas tendrán un volumen relativo a la posición de JohnLemon. Esto hará mucho más fácil el identificar cuán cerca están los fantasmas para el jugador. Ahora vamos a agregar sonido a los fantasmas:
1. En la ventana Hierarchy, expande el GameObject Enemies.
2. Selecciona uno de los GameObjects Ghost. Usa la flecha de acceso rápido junto a su nombre para abrir el Prefab para edición.
3. En la ventana Project, expande la carpeta Assets > Audio y ubica el clip de sonido o Audio Clip SFXGhostMove.
4. Arrastra el Audio Clip SFXGhostMove desde la ventana Project al GameObject Ghost en la ventana Hierarchy.
5. En la ventana Inspector, ubica el componente Audio Source.
6. Para que el nivel de volumen no sea abrumante y para asegurarte de que varíe dependiendo de la distancia de JohnLemon:
Habilita la casilla de la propiedad Loop;
configura la propiedad Volume a 0,4;
configura la mezcla espacial o Spatial Blend a 1, de tal manera que sea completamente 3D
¡Eso cubre los elementos fundamentales!
18. ¿Cómo se ajusta la configuración de las herramientas del sonido 3D?
Vamos a ajustar un par de herramientas avanzadas para hacer que tus fantasmas suenen realmente bien:
1. En el componente Audio Source, expande la sección 3D Sound Settings.
La configuración de sonido 3D controla cómo el sonido varía dependiendo en la distancia del receptor de sonido o Audio Listener.
2. Cambia la propiedad Max Distance a 10. Configurar la distancia máxima a 10 significa que cuando un fantasma esté a 10 metros el jugador podrá escucharlo, pero muy tenuemente.
3. La manera en la que el volumen cambia con la distancia se controla con Volume Rolloff. Actualmente está configurado a Logarithmic Rollof, el mismo que funciona bien para distancias largas. Desde que tu distancia máxima o Max Distance está configurada solo a 10, cambia el Volume Rolloff a Custom Rolloff.
4. La curva por defecto personalizada es perfecta para este juego; por ende, no hay necesidad de ajustarla.
Sin embargo, hay algo más que hacer antes de que hayas terminado.
19. ¿Cómo se corrige la dirección del efecto de sonido de los fantasmas?
Le pusiste el componente receptor de sonido o Audio Listener a JohnLemon; pero hay un pequeño problema, cuando JohnLemon se da la vuelta, el receptor de sonido también se da la vuelta con él. Esto significa que cuando JohnLemon está de cara a la pantalla, los ojos virtuales del jugador (la cámara) y los oídos virtuales del jugador (el receptor de sonido) estarán encarando direcciones opuestas. Debido a esto, los fantasmas van a sonar como si estuvieran en el lado opuesto.
Vamos a usar una combinación de dos propiedades para hacer que el sonido del fantasma parezca que no tenga dirección pero que se vuelva más alto a medida que el fantasma se acerque:
1. El clip de sonido SFXGhostMove ha sido configurado para tocar sonido Mono en vez de Stereo. Esto significa que el sonido es idéntico en los canales derecho e izquierdo. Si quieres ver las configuraciones de importación, ubícalas en Assets > Audio y selecciona el clip para ver sus configuraciones.
2. En la fuente de sonido o Audio Source para el Prefab Ghost, ubica las 3D Sound Settings. La propiedad Spread (Cundir) controla el rango en grados del que un sonido parece originarse.
3. Configura la propiedad Spread a 180. Esto significa que la mitad del sonido vendrá de cada canal y desde que estos canales son los mismos, el sonido parecerá no tener una fuente precisa.
4. Guarda el Prefab Ghost y regresa a la escena.
5. Guarda la escena.
¡Terminaste tu juego! ¡Felicitaciones! Asegúrate de que lo pruebes pare ver cómo funcionará para los jugadores.
20. Resumen
En este tutorial exploraste los fundamentos del sonido en Unity a través de añadir una pista de sonido ambiental y efectos de sonido para tu juego. Tu juego está completo. Tienes algo más que hacer: en el último tutorial de esta serie vas a crear una generación del juego para que puedas distribuirla.