Yo hice que el conejito se moviera una vez el player salga de la zona de diálogo con la función OnTriggerExit2D.
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
Juan Gabriel Gomila
Aportes 9
Preguntas 0
Yo hice que el conejito se moviera una vez el player salga de la zona de diálogo con la función OnTriggerExit2D.
Para el caso del player no he limitado el movimiento, si no que mas bien lo he dejado mal educado jaja pero si sale de la zona del NPC, ejecuto HideDialog() para desactivar y resetear el dialogo:
NPCDialog.cs
En cuanto al NPC, solo desactivo su movimiento si isActive de DialogManager es true:
NPCMovement.cs
Chicos, agregando 4 lineas se hace todo. Cuando el dialogo está activo pongo que el Time.timeScale = 0.
Si el dialogo no está activo lo pongo de nuevo en 1 y listo.
El Time.timeScale maneja todas las fisicas del juego. Con lo cual si lo ponemos a 0 se congela todo.
if (dialogActive)
Time.timeScale = 0f;
else
Time.timeScale = 1.0f;
Metiendo este if en el update del NPCdialog (script) me funciona.
public PlayerController player;
if(!gameObject.GetComponentInParent<NPCMovement>().isTalking)
{
player.enabled = true;
}
else
{
player.enabled = false;
}
Para detener al player cree una referencia al DialogueManager:
.
.
La definí en el start:
.
.
Y comprobé su estado para saber si el personaje podía moverse o no:
.
Genial
Considero mucho más simple que al entrar en la zona del NPC este desactive su script NPCMovement, tambien como tengo la lógica del movimiento del jugador en un script aparte, desactivo esta lógica solo cuando se encuentra en dialogo. Asi nos evitamos mezclar lógicas en scripts y todo se mantiene en el manager.
Yo lo resolví solo verificando si esta activo algún dialog en donde recibe las instrucciones para caminar. Esto solo editando el PlayerController
//Creé esta variable y la pueden dejar asinada desde el start
canWalk=GameObject.FindObjectOfType<DialogManager>().dailogActive;
if ((Mathf.Abs(Input.GetAxisRaw(HORIZONTAL))>0.5f|| Mathf.Abs(Input.GetAxisRaw(VERTICAL))>0.5f) && !canWalk){
walking=true;
lastMovement=new Vector2(
Input.GetAxisRaw(HORIZONTAL),
Input.GetAxisRaw(VERTICAL));
playerRigidbody.velocity=lastMovement.normalized * speed*Time.deltaTime;
}
Hola
¿Quieres ver más aportes, preguntas y respuestas de la comunidad?