este curso está completísimo
Introducción
Game Design del juego
La estructura y assets de un proyecto en Unity
Convirtiendo nuestros assets en Tiles
Tilemaps y creación del escenario
Bonus: FastForward de la creación del escenario, sorting layers y creación de colliders
Acá encontrarás los archivos de este curso
Personaje principal: Movimiento y Animaciones
El jugador y el movimiento
Creando nuestra primera animación
Creando el grafo de animaciones
Usando un árbol de animaciones
Mostrando la solución del desafío e implementando transición entre blended trees
Programando una cámara que siga al jugador
Corrección del bug gráfico
límites del escenario, rigid bodies
Ejercicio: diseño de interiores
Escenarios Avanzados
Transiciones entre escenas
Mantener Player y Camera entre escenas
Spawning Points: programando que el jugador y la cámara aparezcan en el lugar correcto al cambiar de escena
Agregando Identificadores a nuestros Spawning Points para controlar mejor el flujo de nuestro juego
Enemigos Avanzados
Creando nuestro enemigo
Programando las físicas y el patrullaje del enemigo
Generando movimiento completamente aleatorio
Programando el ataque del enemigo
Crear Manager de Health del Player
Crear armas
Programando el ataque del Player con arma
Mover la espada al caminar
Creando el ataque con espada
Ejecutando el ataque con un botón
Movimiento en diagonal
Optimizando nuestro player controller
Ataque mejorado
Uso de partículas
Añadir el daño del enemigo en batalla
Programando los contadores de vida del enemigo
Colocando más info de UI en pantalla
Script de la vida
Personaje principal avanzado
Añadir el daño del personaje (ejercicio)
Sistema de puntos de experiencia para nuestro personaje principal
Level Up!
Level Up! Defensa y Reto Final del Módulo: Stats de los enemigos
Creando un NPC
Limitar el movimiento de nuestro NPC
Creando una pantalla de diálogos para nuestro RPG
El diálogo del NPC
Múltiples líneas de diálogo
Parar el NPC durante el diálogo
Parar el personaje durante el diálogo
Quests
La estructura de una quest
Quest 1: Ir a un lugar
Quest 2: Encontrar un objeto
Quest 3: Matar enemigos
Revisión de bugs
Mantener la cámara dentro del escenario
El problema al cambiar de escena
Audio
Agregando SFX a nuestro videojuego
Agregando música a nuestro videojuego
Ajustar volúmen del audio de cada uno de los efectos de sonido
Creando un VolumeManager
Agregando economía a nuestro juego y cierre
No tienes acceso a esta clase
¡Continúa aprendiendo! Únete y comienza a potenciar tu carrera
Al crear un videojuego, la música de fondo desempeña un papel fundamental, ya que mejora la experiencia del jugador, aportando diferentes emociones y ambientaciones según cada escena o nivel. En este contenido, aprenderás cómo implementar un gestor de audio que te permitirá activar o desactivar la música según la escena, e incluso controlar el volumen de forma global. Vamos a aprender cómo llevar esto a cabo y darle a tu juego el toque musical adecuado.
El gestor de audio de fondo es un componente encargado de manejar las distintas pistas de música que suenan durante el juego. Este script actúa como un "reproductor" que puede cambiar de pista sin intervención directa del usuario, permitiendo ambientar cada nivel de manera automática al cambiar de escena.
Aquí te guiaremos en la creación de un gestor de audio que:
AudioManager
.Don't Destroy On Load
al AudioManager
para que persista entre escenas.Play On Awake
.Escribir el script del AudioManager:
public class AudioManager : MonoBehaviour { public AudioSource[] audioTracks; public int currentTrack; public bool audioCanBePlayed;
void Update() {
if (audioCanBePlayed && !audioTracks[currentTrack].isPlaying)
audioTracks[currentTrack].Play();
}
public void PlayNewTrack(int newTrack) {
audioTracks[currentTrack].Stop();
currentTrack = newTrack;
audioTracks[currentTrack].Play();
}
}
Para cambiar de pista automáticamente según eventos dentro del juego, como al entrar en una nueva escena o área:
Crear el script de cambio de pista:
public class AudioNewTrack : MonoBehaviour { private AudioManager manager; public int newTrackId; public bool playOnStart;
void Start() {
manager = FindObjectOfType<AudioManager>();
if (playOnStart)
manager.PlayNewTrack(newTrackId);
}
void OnTriggerEnter2D(Collider2D collision) {
if (collision.gameObject.CompareTag("Player")) {
manager.PlayNewTrack(newTrackId);
gameObject.SetActive(false);
}
}
}
Asociar script a las escenas:
AudioNewTrack
.newTrackId
según la pista que deba sonar en esa escena.Es común utilizar música con duración más corta y en formato comprimido, especialmente en juegos para móviles. Esto mejora el rendimiento y el tiempo de carga del juego. Para juegos de mayor envergadura, como los de consola, la música puede tener mayor calidad y duración, a menudo grabada por orquestas filarmónicas de renombre.
Implementar un gestor de audio efectivo puede transformar la experiencia de cada usuario, añadiendo dinamismo e inmersión, elementos claves en videojuegos exitosos, como se observa en juegos aclamados tipo "Dark Souls".
Fomento la creatividad y la experimentación: prueba a implementar estos conocimientos en tus proyectos personales. Siguiendo estos pasos, poco a poco te acercarás a una experiencia de diseño de sonido digna del director de cine que llevas dentro. ¡Sigue avanzando y pulirás tu arte cada día más!
Aportes 5
Preguntas 0
este curso está completísimo
Antes de ver este video utilice el sfxmanager le agregue 2 valiables para la musica del la casa de ricardo y el exterior luego en el CameraFollow agregue una variables sfxmanager y luego con un if o (switch si fueran mas) accedi al nombre de la escena y lo compare con el nombre de la musica
private void Start()
{
sfxmanager = FindObjectOfType<SoundManager>();
if (SceneManager.GetActiveScene().ToString().Equals("Bar"))
sfxmanager.ricardoHouse.Play();
else
sfxmanager.mainScene.Play();
}```
ahora a agregar las funcionalidades para manipular el volumen
Al que le interese yo agregué esta Coroutina para que al activar la música de una zona suba el volumen de forma progresiva en lugar de aparecer de golpe:
public void ChangeMusic()
{
music.volume = 0;
if (inForest)
{
music.Stop();
music.clip = musicForest;
music.Play();
}
if (inHouse)
{
music.Stop();
music.clip = ricardoHouse;
music.Play();
}
StartCoroutine(MoveVolume());
}
private IEnumerator MoveVolume(bool direction = true)
{
float volume = PlayerPrefs.GetFloat("MusicVolume", 0.6f);
volume *= 100;
// TRUE = En Subida
if (direction)
{
for (int i = 0; i < volume; i++)
{
music.volume += 0.01f;
yield return new WaitForSeconds(timeToVolumeMax / volume);
}
}
else
{
// FALSE = En Bajada
for (int i = 0; i < volume; i++)
{
music.volume -= 0.01f;
yield return new WaitForSeconds(timeToVolumeMax / volume);
}
music.Stop();
}
}
public void StopMusic()
{
inForest = false;
inHouse = false;
StartCoroutine(MoveVolume(false));
}
Genial
¡Muy buena clase!
¿Quieres ver más aportes, preguntas y respuestas de la comunidad?