Introducción

1

Game Design del juego

2

La estructura y assets de un proyecto en Unity

3

Convirtiendo nuestros assets en Tiles

4

Tilemaps y creación del escenario

5

Bonus: FastForward de la creación del escenario, sorting layers y creación de colliders

6

Acá encontrarás los archivos de este curso

Personaje principal: Movimiento y Animaciones

7

El jugador y el movimiento

8

Creando nuestra primera animación

9

Creando el grafo de animaciones

10

Usando un árbol de animaciones

11

Mostrando la solución del desafío e implementando transición entre blended trees

12

Programando una cámara que siga al jugador

13

Corrección del bug gráfico

14

límites del escenario, rigid bodies

15

Ejercicio: diseño de interiores

Escenarios Avanzados

16

Transiciones entre escenas

17

Mantener Player y Camera entre escenas

18

Spawning Points: programando que el jugador y la cámara aparezcan en el lugar correcto al cambiar de escena

19

Agregando Identificadores a nuestros Spawning Points para controlar mejor el flujo de nuestro juego

Enemigos Avanzados

20

Creando nuestro enemigo

21

Programando las físicas y el patrullaje del enemigo

22

Generando movimiento completamente aleatorio

23

Programando el ataque del enemigo

24

Crear Manager de Health del Player

25

Crear armas

26

Programando el ataque del Player con arma

27

Mover la espada al caminar

28

Creando el ataque con espada

29

Ejecutando el ataque con un botón

30

Movimiento en diagonal

31

Optimizando nuestro player controller

32

Ataque mejorado

33

Uso de partículas

34

Añadir el daño del enemigo en batalla

35

Programando los contadores de vida del enemigo

36

Colocando más info de UI en pantalla

37

Script de la vida

Personaje principal avanzado

38

Añadir el daño del personaje (ejercicio)

39

Sistema de puntos de experiencia para nuestro personaje principal

40

Level Up!

41

Level Up! Defensa y Reto Final del Módulo: Stats de los enemigos

42

Creando un NPC

43

Limitar el movimiento de nuestro NPC

44

Creando una pantalla de diálogos para nuestro RPG

45

El diálogo del NPC

46

Múltiples líneas de diálogo

47

Parar el NPC durante el diálogo

48

Parar el personaje durante el diálogo

Quests

49

La estructura de una quest

50

Quest 1: Ir a un lugar

51

Quest 2: Encontrar un objeto

52

Quest 3: Matar enemigos

53

Revisión de bugs

54

Mantener la cámara dentro del escenario

55

El problema al cambiar de escena

Audio

56

Agregando SFX a nuestro videojuego

57

Agregando música a nuestro videojuego

58

Ajustar volúmen del audio de cada uno de los efectos de sonido

59

Creando un VolumeManager

60

Agregando economía a nuestro juego y cierre

No tienes acceso a esta clase

¡Continúa aprendiendo! Únete y comienza a potenciar tu carrera

Agregando música a nuestro videojuego

57/60
Recursos

¿Cómo configurar la música de fondo en un videojuego?

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.

¿Qué es un gestor de audio de fondo?

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:

  • Almacena múltiples pistas de audio para el juego.
  • Permite cambiar de pista automática o manualmente.
  • Mantiene el audio consistente entre las distintas escenas.

¿Cómo se crean y configuran los objetos de audio?

  1. Crear el Audio Manager:
  • Crea un GameObject vacío y nómbralo AudioManager.
  • Agrega el script Don't Destroy On Load al AudioManager para que persista entre escenas.
  1. Configurar las pistas de audio:
  • Agrega cada pista como un GameObject en la escena.
  • Configura las pistas para que el bucle (loop) esté activado y desactiva Play On Awake.
  1. 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();
    }
    

    }

¿Cómo cambiar de pista de música en el juego?

Para cambiar de pista automáticamente según eventos dentro del juego, como al entrar en una nueva escena o área:

  1. 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);
        }
    }
    

    }

  2. Asociar script a las escenas:

  • Crea un nuevo GameObject en cada escena donde se desea cambiar la música.
  • Asigna el script AudioNewTrack.
  • Configura el newTrackId según la pista que deba sonar en esa escena.

¿Por qué ajustar las pistas y su duración?

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

Ordenar por:

¿Quieres ver más aportes, preguntas y respuestas de la comunidad?

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!