Contenido

Audio

Audio

Como ya sabes de juegos anteriores, en Unity utilizamos archivos de audio Audio Clips que reproducimos a través de componentes de tipo Audio Source, cuya salida se conecta a través de un Audio Mixer y se escucha por el Audio Listener, un componente único en la escena, normalmente asociado a la cámara. Dentro de la carpeta Assets > Audio puedes encontrar los siguientes archivos de audio (y otros que de momento no usaremos):
  • explosion_asteriod
  • explosion_player
  • music_background
  • weapon_player
cuyos nombres ya hablan por sí solos.

El mezclador de audio

  • Dentro de la carpeta Assets > Audio, crea un nuevo Audio Mixer con el nombre Mezclador.
  • Haz doble clic en él y, en el apartado Groups, añade dos grupos que dependan de Master llamados SFX (para los efectos sonoros) y Música (para la música de fondo)
De este modo, hemos configurado un mezclador para poder organizar mejor los niveles de nuestros audios. El resultado debería parecerse a este:

La música de fondo

  • Añade un componente Audio Source a la Main Camera
  • Arrastra dentro de la propiedad Audio Clip el audio music_background.mp3 (que deberías tener en Assets > Audio).
  • Haz clic en el círculo a la derecha de la propiedad Audio Mixer y selecciona el grupo Música en la ventana flotante.
  • Activa la propiedad Loop (reproducir en bucle)
  • Asegúrate de que está activa la propiedad Play On Awake (reproducir al arrancar)

El sonido de disparo

  • Añade un componente Audio Source a la Nave.
  • Arrastra dentro de la propiedad Audio Clip el audio weapon_player.mp3 (que deberías tener en Assets > Audio).
  • Haz clic en el círculo a la derecha de la propiedad Audio Mixer y selecciona el grupo SFX en la ventana flotante.
  • Desactiva la propiedad Play On Awake (reproducir al arrancar)
  • Asegúrate de que está desactivada la propiedad Loop (reproducir en bucle)
  • Modifica el código en el script NaveController para que reproduzca el sonido de disparo:

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

public class NaveController : MonoBehaviour {

	//Declarlo la variable de tipo RigidBody que luego asociaremos a nuestro objeto
	private Rigidbody rb;

	//Declaro la variable pública velocidad para poder modificarla desde la Inspector window
	[Range(5,15)]
	public float velocidad = 10;

	//Límites del juego
	float xMin = -5.8f;
	float xMax = 5.8f;
	float zMin = -3.7f;
	float zMax = 13.5f;

	//Declaro la variable pública giro para poder modificarla desde la Inspector window
	[Range(-1,-10)]
	public float giro = -4;

	//Declaro la variable de tipo GameObject que luego asociaremos a nuestro prefab Disparos
	public GameObject disparo;

	//Declaro la variable de tipo Transform para la posición del disparador
	public Transform disparador;

	//Declaro la variable de tipo float velocidadDisparo para la velocidad con la que puedo generar disparos
	[Range(0,1)]
	public float velocidadDisparo = 0.25f; //4 por segundo

	//Tiempo que tiene que transcurrir hasta el próximo disparo
	private float proximoDisparo;

    //Audio Source
    public AudioSource audioSource;

	void Start () {

		//Capturo el rigidbody de la nave al iniciar el juego
		rb = GetComponent<Rigidbody>();

        //Capturo el audio source de la nave al iniciar el juego
        audioSource = GetComponent<AudioSource>();

	}

	//esto lo ejecuta antes de actualizar el último frame
	void Update () {


		if (Input.GetButton("Fire1") && Time.time > proximoDisparo){

			//Incremento el valor de proximo disparo
			proximoDisparo = Time.time + velocidadDisparo;

			//Instancio un nuevo disparo en esa posición y con esa rotación
			Instantiate(disparo, disparador.position, disparador.rotation);

            //Sonido de disparo
            audioSource.Play();

		}

	}

	// Porque voy a utilizar la física para moverlo
	void FixedUpdate () {

		//Capturo el movimiento en horizontal y vertical de nuestro teclado
		float movimientoH = Input.GetAxis("Horizontal");
		float movimientoV = Input.GetAxis("Vertical");

		//Genero el vector de movimiento asociado, teniendo en cuenta la velocidad
		Vector3 movimiento = new Vector3(movimientoH * velocidad, 0.0f, movimientoV * velocidad);

		//Aplico ese movimiento al RigidBody de la nave
		rb.AddForce(movimiento);

		//Restrinjo la posición de la nave a los límites del juego
		rb.position = new Vector3
        (
            Mathf.Clamp (rb.position.x, xMin, xMax),
            0.0f,
            Mathf.Clamp (rb.position.z, zMin, zMax)
        );

		//Rotación de la nave en Z en función de la velocidad en X
		rb.rotation = Quaternion.Euler (0.0f, 0.0f, rb.velocity.x * giro);

	}
}

El sonido de explosión de la nave

  • Añade un componente Audio Source al Prefab explosion_player (dentro de Prefabs > VFX > Explosions).
  • Arrastra dentro de la propiedad Audio Clip el audio explosion_player.mp3 (que deberías tener en Assets > Audio).
  • Haz clic en el círculo a la derecha de la propiedad Audio Mixer y selecciona el grupo SFX en la ventana flotante.
  • Asegúrate de que está activa la propiedad Play On Awake (reproducir al arrancar)
  • Asegúrate de que está desactivada la propiedad Loop (reproducir en bucle).

El sonido de explosión del asteroide

  • Añade un componente Audio Source al Prefab explosion_asteroid (dentro de Prefabs > VFX > Explosions).
  • Arrastra dentro de la propiedad Audio Clip el audio explosion_asteroid.mp3 (que deberías tener en Assets > Audio).
  • Haz clic en el círculo a la derecha de la propiedad Audio Mixer y selecciona el grupo SFX en la ventana flotante.
  • Asegúrate de que está activa la propiedad Play On Awake (reproducir al arrancar)
  • Asegúrate de que está desactivada la propiedad Loop (reproducir en bucle).