jairogarcíarincón
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.
- 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:
- 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)
- 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);
}
}
- 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).
- 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