pues yo para que no movieran al npc le puse de masa 1000
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
Crear una interfaz de diálogo convincente en un videojuego es esencial para ofrecer a los jugadores una experiencia inmersiva y fluida. Este proceso requiere una cuidadosa atención al detalle en términos de diseño de interfaces gráficas y UX. Aquí, compartimos los pasos fundamentales, desde la detección de proximidad entre el jugador y el NPC hasta la implementación visual y lógica en Unity.
Para crear una interfaz efectiva, se recomienda un diseño simple y funcional. Uno de los enfoques más eficaces es tener una zona en la parte inferior de la pantalla donde el texto del diálogo sea claramente visible. A continuación, describimos cómo lograrlo:
La lógica detrás del manejo de diálogos es crucial para tener una experiencia de usuario fluida. Aquí resumimos el proceso de implementación de esta lógica usando Unity y C#:
Usa la librería UnityEngine.UI
para manejar elementos UI.
Declara variables públicas para la caja del diálogo (DialogBox
), el texto (DialogText
) y un booleano (DialogActive
) para gestionar el estado del diálogo.
using UnityEngine; using UnityEngine.UI;
public class DialogManager : MonoBehaviour { public GameObject DialogBox; public Text DialogText; public bool DialogActive; }
En el método Update()
, verifica si el diálogo está activo y si se presiona la tecla de espacio para ocultarlo.
Implementa el método ShowDialog
que recibe un texto y lo muestra en pantalla, controlando las propiedades de visibilidad y contenido de los elementos UI.
void Update() { if (DialogActive && Input.GetKeyDown(KeyCode.Space)) { DialogActive = false; DialogBox.SetActive(false); } }
public void ShowDialog(string text) { DialogActive = true; DialogBox.SetActive(true); DialogText.text = text; }
La coordinación entre la interfaz gráfica y el código es esencial para asegurar que las interacciones son percibidas por los jugadores de manera consistente y predecible. Es importante:
Este enfoque garantiza que los jugadores se sientan parte del universo que estamos creando, manteniendo el interés y la curiosidad por la historia que queremos contarles. ¡Continúa aprendiendo, creando e innovando en el desarrollo de videojuegos!
Aportes 6
Preguntas 0
pues yo para que no movieran al npc le puse de masa 1000
Muy buenas gente, a todo lo aprendido en esta clase le añadí un tiempo de carga a las letras del diálogo para que en lugar de aparecer de golpe aparezcan de a poco. Y también puse que si el usuario da click en la pantalla mientras se estan cargando las letras aparezcan todas así no tiene que esperar si no quiere. Así quedaría:
private void Update()
{
if(dialogActive && (Input.GetButtonDown("Fire1") || Input.GetKeyDown(KeyCode.Space)))
{
// Finalizar la sección de dialogo
dialogActive = false;
dialogZone.SetActive(false);
nextDialog.gameObject.SetActive(false);
}
if(inMove && (Input.GetButtonDown("Fire1") || Input.GetKeyDown(KeyCode.Space)))
{
inMove = false;
StopCoroutine(ShowText());
dialog.text = textDialog;
nextDialog.gameObject.SetActive(true);
}
}
public void ShowDialog(string text)
{
textDialog = text;
dialogActive = true;
dialogZone.SetActive(true);
StartCoroutine(ShowText());
}
private IEnumerator ShowText()
{
// Vaciar texto para comenzar de nuevo
dialog.text = "";
// Activar movimiento de texto
inMove = true;
// Espera inicial antes de cargar el texto
yield return new WaitForSeconds(timeToDialog);
for (int i = 0; i < textDialog.Length; i++)
{
// Rompe el bucle si se desactiva su movimiento
if (!inMove)
break;
dialog.text += textDialog[i];
yield return new WaitForSeconds(timeToDialog);
}
inMove = false;
nextDialog.gameObject.SetActive(true);
}
Genial
Hola ya se unity
Aquí el código:
using System.Collections;
using System.Collections.Generic;
using UnityEngine.UI;
using UnityEngine;
public class DialogManager : MonoBehaviour
{
/**** Variables. ****/
public GameObject dialogBox;
public Text dialogText;
public bool dialogActive;
// Start is called before the first frame update
void Start()
{
}
// Update is called once per frame
void Update()
{
if (dialogActive && Input.GetKeyDown(KeyCode.Space))
{
dialogActive = false;
dialogBox.SetActive(false);
}
}
public void ShowDialog(string text)
{
dialogActive = true;
dialogBox.SetActive(true);
dialogText.text = text;
}
}
¿Quieres ver más aportes, preguntas y respuestas de la comunidad?