Este docente es una maravilla.
Introducción
Diseño y Prototipado Rápido de RPGs con Unity
Creación de un Roguelike en 2D con Unity
Corte y Configuración de Sprites para Videojuegos en Unity
Creación de Paletas y Capas en Unity para Diseñar Escenarios 2D
Capas de Ordenación y Colisiones en Unity para Videojuegos 2D
Uso de Gráficos en Proyectos de Unity
Personaje principal: Movimiento y Animaciones
Controlador de Movimiento en Unity: Script PlayerController
Animación de Personajes en Unity: Creación de Clips y Timelines
Creación y gestión de animaciones en Unity con Animator
Creación de Blend Trees para Animaciones de Personajes
Controlador y Animador de Personajes en Unity
Programación de cámara que sigue al jugador en Unity 2D
Corrección de Bugs Gráficos en Unity: Creación de Materiales Adecuados
Colisiones y Movimiento en Unity con Rigidbody 2D
Diseño y Creación de Escenarios en Videojuegos 2D
Escenarios Avanzados
Programación de Transiciones de Escenas en Unity
Uso de Don'tDestroyOnLoad en Unity para Gestión de Objetos Persistentes
Sincronización de Escenas con Spawn Zones en Videojuegos
Transiciones y Gestión de Escenarios en Videojuegos RPG
Enemigos Avanzados
Configuración de Enemigos en Videojuegos: Animaciones y Física
Programación de Movimiento Aleatorio para Enemigos en Juegos de Rol
Aleatoriedad en el Movimiento de Enemigos en Videojuegos
Detección de Colisiones y Reinicio en Unity
Gestión de Vida en Videojuegos: Creación de un Manager de Vida
Configuración de Armas y Colisiones en Unity para Videojuegos 2D
Programación de Vida y Daño en Enemigos de Videojuegos
Animación de Espada en Unity para Personajes 2D
Animaciones de Ataque en Unity con Blend Tree y Parámetros
Programación de Ataques y Animaciones en Videojuegos
Normalización de Velocidad en Movimiento Diagonal en Unity
Optimización de Código en Controladores de Juego
Efectos Visuales y Colisiones en Ataques de Videojuegos
Creación de Efectos de Explosión con Partículas en Unity
Crear un Canvas de Daño en Unity para Videojuegos
Programación de Texto de Daño en Unity
Creación de un HUD para mostrar la barra de vida en videojuegos
Creación y Gestión de un UI Manager en Unity para Videojuegos
Personaje principal avanzado
Efectos Visuales de Daño en Unity: Parpadeo y Color de Texto
Implementación de sistema de experiencia y niveles en videojuegos de rol
Implementación de Estadísticas de Nivel en Juegos de Rol
Sistema de Defensa y Niveles en RPG: Implementación y Ajustes
Creación y Movimiento de NPCs en Videojuegos RPG
Limitación de Movimiento para NPCs en Unity
Diseño de Interfaz de Diálogo en Videojuegos con Unity
Programación de diálogos interactivos para NPCs en videojuegos
Implementación de Diálogos Dinámicos en Videojuegos de Rol
Control de Movimiento del NPC durante Diálogos en Videojuegos
Control de Diálogos y Movimiento en Videojuegos con Unity
Quests
Creación y Gestión de Misiones en Juegos de Rol
Creación de Misiones Triggers en Videojuegos con Unity
Creación de Misiones de Recolección en Videojuegos
Creación de Misiones para Derrotar Enemigos en Videojuegos
Corrección de Bugs en Diálogos y Animaciones de Videojuegos
Límites de cámara en juegos 2D: implementación y ajuste
Ajuste Dinámico de Límites de Cámara en Unity
Audio
Efectos de Sonido en Videojuegos con Unity
Gestión de Música de Fondo en Videojuegos con Unity
Control de Volumen de Audio en Videojuegos con Unity
Gestión de Volumen Global en Videojuegos
Creación de un Sistema de Economía Virtual en Videojuegos
No tienes acceso a esta clase
¡Continúa aprendiendo! Únete y comienza a potenciar tu carrera
En el desarrollo de videojuegos con Unity, uno de los temas más importantes a dominar son las colisiones. Estos son eventos donde dos objetos en la escena se "tocan" y se espera una reacción programada. Esta habilidad es crucial, ya que los errores de colisión pueden causar que los objetos se atraviesen, impactando negativamente la experiencia del jugador.
Para corregir este tipo de errores, asegúrate de que todos los objetos involucrados tengan un collider
y que el personaje tenga asignado un rigidbody
. Solo entonces, Unity puede detectar y manejar las colisiones correctamente. Si un objeto no tiene estas propiedades, puede pasar a través de otros, realizándose el indeseado efecto "fantasma".
Definir los bordes del escenario es vital para mantener al personaje dentro de los límites del juego. Si no los has colocado, es necesario crear fronteras ficticias usando GameObject
vacíos con un BoxCollider2D
. Estos objetos serán invisibles, pero funcionarán como barreras invisibles para limitar el movimiento del jugador.
GameObject
vacío y nómbralo adecuadamente (por ejemplo, boundary
).BoxCollider2D
y ajusta su escala para que se alinee con los bordes del escenario.Esta técnica te permitirá asegurar que el personaje siempre permanezca en el área deseada del tablero de juego.
Para impedir que el personaje pase a través de los objetos tras agregar las fronteras, se requiere configurar el rigidbody2D
del personaje. Al hacerlo, podemos controlar el comportamiento de las colisiones y ajustar las físicas del juego según las necesidades específicas.
Rigidbody2D
.Gravity Scale
) a 0, ya que este no es un juego donde la gravedad es relevante.El ajuste de estos parámetros aseguran que el personaje interactúe adecuadamente con el entorno y no pierda su orientación correcta al moverse y colisionar.
Es un error mantener el método Translate
para manejar el movimiento cuando se trabaja con rigidbodies
. Al cambiar a un sistema de físicas, debes utilizar la velocidad (velocity
) del Rigidbody2D
para las animaciones del personaje.
// Dentro del Player Controller
private RigidBody2D PlayerRigidBody; // Declara la variable
void Start() {
PlayerRigidBody = GetComponent<RigidBody2D>(); // Inicializa en Start
}
// Reemplaza el movimiento con Translate
PlayerRigidBody.velocity = new Vector2(input.GetAxis("Horizontal") * speed * Time.deltaTime, PlayerRigidBody.velocity.y);
Este cambio garantiza que las físicas sean el motor principal que determina cómo y cuándo se mueven los personajes en la dirección correcta. Así se elimina el efecto de que el personaje "patine" o se desplace de manera inercial cuando no está caminando.
Finalmente, ajustar la velocidad y el comportamiento del movimiento es crucial para evitar que el personaje se comporte de manera extraña, como deslizándose al soltar la función de mover. Aumenta el parámetro speed
en el controlador para superar la resistencia creada por el peso del objeto.
Para frenar el personaje cuando no camina:
if (!walking) {
PlayerRigidBody.velocity = Vector2.zero; // Detener el movimiento
}
Estas mejoras y ajustes aseguran que el movimiento sea fluido y correcto, eliminando cualquier tracción o velocidad no deseada. Tener esto en cuenta mejora considerablemente el diseño y jugabilidad de tu videojuego.
Aportes 16
Preguntas 5
Este docente es una maravilla.
Para los que tengan problemas con su movimiento del personaje (se mueve raro, algo brusco o acelera de vez en cuando) el problema esta en el Input.GetAxisRaw(horizontal) * speed * Time.deltaTime;
El hecho es de que ese Time.deltaTime no deberia de estar ahi dado a que ya no es distancia = velocidad * tiempo, sino solo necesitamos de la velocidad del mismo, en este caso “speed”. Quedaria asi:
Input.GetAxisRaw(horizontal) * speed;
Asi mismo, debes de cambiarlo para la vertical:
Input.GetAxisRaw(vertical) * speed;
Hola Juan/Comunidad, vi varias veces el video y tengo todo igual pero el personaje quedo raro después de que le agregamos las físicas. Y en cuanto a raro me refiero a que si estas caminando verticalmente (W o flecha para arriba) y aprietas rápidamente y sin soltar la (D o flecha para la derecha) y luego sueltas la (W o flecha para arriba) sigue caminando en diagonal, cuando tendría que caminar solamente para la derecha. Reverse los cambios hasta antes de agregarle el rígidobodies y funciona como describo anteriormente, porfavor su ayuda en esto.
Les quisiera aportar a ustedes, queridos compañeros estudiantes, una buena practica en el uso del Update:
Usen el Update para recibir los inputs y todo lo que venga de parte del jugador. Usen el FixedUpdate para implementar todo lo relacionado al RB (rigidbody) y otras fisicas. Y finalmente, usen el LateUpdate para las animaciones. Estas buenas practicas ayudaran al motor de Unity.
les estaria quedando algo asi…
Update() { INPUTS }
FixedUpdate() { RB y FISICAS }
LateUpdate() { ANIMACIONES }
Por si alguien no hizo un mapa completamente cuadrado y necesita otra forma de colocar los colliders, pueden hacer dos capas mas en la grid, una que sea Sea Collider y otra que sea Sea solo, hacer una linea en los bordes con agua, y luego pintar agua debajo y mas alla de la linea del sea collider.
No es aconsejable colocarle Collider a todo lo que sea Sea porque son realmente un monton de colliders que deben renderizarse al mismo tiempo.
Una forma alternativa es usar un Edge Collider, cuya forma pueden ir moldeando y quedaran los limites trazados dependiendo de la precision de su tiempo libre. 😅
En lo personal, le di un margen al terreno con arboles que agregue a la capa foreground(En mi caso le di el nombre de collisions), ademas de tener un pequeño espacio para que simule una continuidad de bosque y no se vea un fondo oscuro o de un color que va fuera del contexto del juego.
Aunque realmente, no se si esto de problemas con la optimización
ahí esta mi progreso hasta ahora 😄
Hola me pasa algo muy raro y es que cuando mi personaje camina como que se acelera un poco o como si se teletransportara alguien sabe como corregir este bug?
Hola! de pronto alguien sabe por que me volvieron a aparecer lineas azules verticales cuando corro el juego? ya tiene aplicado el fix con el material en las capas de la grid, pero volvieron a salir 😦
No hay que incrementar la velocidad, sino que se aplico la misma lógica del Transform.Translate al rigid.velocity.
El primero traslada al objeto cada frame, y el segundo asigna una velocidad en m/s.
El Time.deltaTime es el valor de 1 dividido para los cuadros por segundo.
Este es un valor fraccionario que en el caso de que sean 60 es de 0.0166.
Esto es útil para la primera opción pero no para rigid.velocity. Yo opte por no multiplicar la velocidad por Time.deltaTime y no tuve que aumentarle la velocidad para tener el mismo efecto.
Yo tuve que ponerle 1700 de speed y 0.5 en masa para que no se moviera lento.
Genial
yo solo hice una capa para colliders y ya me evite crear los gameobjets
Anexo foto de error: https://drive.google.com/file/d/1OCTV__KNUdZ1Pfzo3E6B0bBBi68PQjku/view?usp=sharing
Que tal, alguien sabe porque tengo este error?
NullReferenceException: Object reference not set to an instance of an object Unity Editor.EyeDropper.End()(at C:/buildslave/unity/Editor/Mono/GUI/ColorPiker.cs1268)
Lo pude “Solucionar”, deseleccionando al “Player”, pero esa no es la solucion correcta y me gustaría saber porque ocurre
Lo hice de esta forma tomando en cuenta las clases que hemos visto en los cursos anteriores. En translate creo que es necesario usar deltaTime pero no con el rigibody, son formulas distintas al parecer y va mas rápido con la velocidad en 4 si no aplicamos el deta.Time.
¿Quieres ver más aportes, preguntas y respuestas de la comunidad?