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

Quest 1: Ir a un lugar

50/60
Recursos

¿Qué es una quest tipo "ir a un lugar"?

Las quests de tipo "ir a un lugar" son una excelente manera de iniciar en el mundo del desarrollo de videojuegos. Este tipo de misión implica desplazarse a un sitio específico dentro del juego, como un cementerio, una casa o cualquier otro lugar determinado. Las misiones de esta categoría son bastante sencillas de implementar, ya que funcionan con triggers que activan el inicio y el final de la misión.

Para crear una quest basada en triggers, como ir a la casa de Ricardo, se define un texto de inicio cuando se activa la misión y un texto de finalización al llegar al destino. Este enfoque integra varios elementos esenciales del desarrollo de videojuegos y permite aumentar la interacción del jugador con el juego.

¿Cómo se configuran los triggers de inicio y fin en una quest?

En Unity, configurar los triggers de una quest de tipo "ir a un lugar" es un proceso sistemático y fundamental para controlar cuándo se inicia y finaliza la misión. Habitualmente, se emplean componentes como "Box Collider 2D" en forma de trigger.

  1. Configurar la zona de inicio (quest start):
  • Crea un objeto vacío llamado "quest start".
  • Añade un "Box Collider 2D" como trigger.
  • Ajusta la ubicación del trigger para que coincida con el lugar donde comienza la misión.
  1. Configurar la zona de fin (quest end):
  • Crea otro objeto vacío llamado "quest end".
  • Añade un "Box Collider 2D" similar al anterior y adapta su tamaño para que se ajuste a una zona más amplia, si es necesario, alrededor del destino final.

Ambas zonas tendrán scripts asociados denominados "Quest Trigger" que indicarán al sistema de juego cuándo activar o completar la misión, generalmente mediante la detección de la colisión del jugador con el trigger.

¿Cómo se controla el flujo de la misión?

El flujo de la misión se gestiona mediante scripts que definen cuándo se inicia o completa la misión. La clase "Quest Trigger" desempeña un papel crucial en este control.

using UnityEngine;

[RequireComponent(typeof(BoxCollider2D))]
public class QuestTrigger : MonoBehaviour
{
    private QuestManager questManager;
    public int questID;
    public bool isStartPoint;

    void Start()
    {
        questManager = FindObjectOfType<QuestManager>();
    }

    void OnTriggerEnter2D(Collider2D collision)
    {
        if (collision.gameObject.tag.Equals("Player"))
        {
            if (!questManager.questsCompleted[questID])
            {
                if (isStartPoint && !questManager.quests[questID].gameObject.activeInHierarchy)
                {
                    questManager.quests[questID].gameObject.SetActive(true);
                    questManager.quests[questID].StartQuest();
                }
                else if (!isStartPoint && questManager.quests[questID].gameObject.activeInHierarchy)
                {
                    questManager.quests[questID].CompleteQuest();
                }
            }
        }
    }
}

Este script:

  • Verifica que el jugador ha ingresado a una zona de trigger.
  • Activa la misión si es la zona de inicio y la misión aún no ha comenzado.
  • Completa la misión si es la zona de fin y la misión está activa.

Además, se puede configurar para que las misiones sean repetibles o no mediante el ajuste de ciertas líneas de código.

¿Qué recomendaciones puedes aplicar para enriquecer las quests?

Las quests se pueden personalizar enormemente para mejorar la experiencia del jugador. Aquí algunos consejos:

  • Cinemáticas: añadir cinemáticas al activar un trigger puede añadir una capa de narrativa visual que enriquece la historia del juego.
  • Recompensas: ofrecer recompensas como experiencia o ítems al completar una quest puede motivar la participación del jugador.
  • Misiones repetibles: permitir que ciertas misiones se repitan puede animar a los jugadores a seguir explorando el mundo del juego.
  • Niveles de experiencia: introducir un sistema de experiencia que incremente según las quests completadas es una manera efectiva de mantener la progresión y el interés del jugador.

Implementando estos elementos, no solo refuerzas el atractivo del juego, sino que también fortaleces tu destreza en diseño y programación de videojuegos. ¡Sigue explorando y desarrollando tus habilidades!

Aportes 3

Preguntas 0

Ordenar por:

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

En el método CompleteQuest hice referencia a CharacterStats y llame al método AddExperience y mediante parámetro le pase el número de experiencia de cada Quest:

stats.AddExperience(XPQuest);```

Para siempre tener una versión precisa de los CharacterStats del player hice que el método complete quest reciba como parámetro una variable del mismo tipo llamada statsToGainExperience y que por defecto sea null por si en algún momento no necesito pasar como parámetro un CharacterStats.
Tambien cree una variable int llamada experienceForCompletion que almacenara la cantidad de esperiencia que otorga la misión.

public void CompleteQuest(CharacterStats statsToGainExperience = null)

Ahora en el método QuestTrigger cuando llamo al método CompleteQuest le paso como referencia el componente CharacterStats del gameObject que colisiono con el trigger (que para este punto ya sabemos que es el player):

manager.quests[questID].CompleteQuest(collision.GetComponent<CharacterStats>()); 

Finalmente al final del método, si statsToGainExperience es diferente de null entonces añado la experiencia:

public void CompleteQuest(CharacterStats statsToGainExperience = null)
    {
        m_QuestManager.ShowQuestText(completeText);
        m_QuestManager.questCompleted[questID] = true;
        gameObject.SetActive(false);
statsToGainExperience?.AddExperience(experienceForCompletion);
    }

Espero te haya servido!! 🙋🏻‍♂️

Genial