jairogarcíarincón

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).


Publicado el 30 de Enero de 2025

unityspace shooter