Introducción

1

Diseño y Prototipado Rápido de RPGs con Unity

2

Creación de un Roguelike en 2D con Unity

3

Corte y Configuración de Sprites para Videojuegos en Unity

4

Creación de Paletas y Capas en Unity para Diseñar Escenarios 2D

5

Capas de Ordenación y Colisiones en Unity para Videojuegos 2D

6

Uso de Gráficos en Proyectos de Unity

Personaje principal: Movimiento y Animaciones

7

Controlador de Movimiento en Unity: Script PlayerController

8

Animación de Personajes en Unity: Creación de Clips y Timelines

9

Creación y gestión de animaciones en Unity con Animator

10

Creación de Blend Trees para Animaciones de Personajes

11

Controlador y Animador de Personajes en Unity

12

Programación de cámara que sigue al jugador en Unity 2D

13

Corrección de Bugs Gráficos en Unity: Creación de Materiales Adecuados

14

Colisiones y Movimiento en Unity con Rigidbody 2D

15

Diseño y Creación de Escenarios en Videojuegos 2D

Escenarios Avanzados

16

Programación de Transiciones de Escenas en Unity

17

Uso de Don'tDestroyOnLoad en Unity para Gestión de Objetos Persistentes

18

Sincronización de Escenas con Spawn Zones en Videojuegos

19

Transiciones y Gestión de Escenarios en Videojuegos RPG

Enemigos Avanzados

20

Configuración de Enemigos en Videojuegos: Animaciones y Física

21

Programación de Movimiento Aleatorio para Enemigos en Juegos de Rol

22

Aleatoriedad en el Movimiento de Enemigos en Videojuegos

23

Detección de Colisiones y Reinicio en Unity

24

Gestión de Vida en Videojuegos: Creación de un Manager de Vida

25

Configuración de Armas y Colisiones en Unity para Videojuegos 2D

26

Programación de Vida y Daño en Enemigos de Videojuegos

27

Animación de Espada en Unity para Personajes 2D

28

Animaciones de Ataque en Unity con Blend Tree y Parámetros

29

Programación de Ataques y Animaciones en Videojuegos

30

Normalización de Velocidad en Movimiento Diagonal en Unity

31

Optimización de Código en Controladores de Juego

32

Efectos Visuales y Colisiones en Ataques de Videojuegos

33

Creación de Efectos de Explosión con Partículas en Unity

34

Crear un Canvas de Daño en Unity para Videojuegos

35

Programación de Texto de Daño en Unity

36

Creación de un HUD para mostrar la barra de vida en videojuegos

37

Creación y Gestión de un UI Manager en Unity para Videojuegos

Personaje principal avanzado

38

Efectos Visuales de Daño en Unity: Parpadeo y Color de Texto

39

Implementación de sistema de experiencia y niveles en videojuegos de rol

40

Implementación de Estadísticas de Nivel en Juegos de Rol

41

Sistema de Defensa y Niveles en RPG: Implementación y Ajustes

42

Creación y Movimiento de NPCs en Videojuegos RPG

43

Limitación de Movimiento para NPCs en Unity

44

Diseño de Interfaz de Diálogo en Videojuegos con Unity

45

Programación de diálogos interactivos para NPCs en videojuegos

46

Implementación de Diálogos Dinámicos en Videojuegos de Rol

47

Control de Movimiento del NPC durante Diálogos en Videojuegos

48

Control de Diálogos y Movimiento en Videojuegos con Unity

Quests

49

Creación y Gestión de Misiones en Juegos de Rol

50

Creación de Misiones Triggers en Videojuegos con Unity

51

Creación de Misiones de Recolección en Videojuegos

52

Creación de Misiones para Derrotar Enemigos en Videojuegos

53

Corrección de Bugs en Diálogos y Animaciones de Videojuegos

54

Límites de cámara en juegos 2D: implementación y ajuste

55

Ajuste Dinámico de Límites de Cámara en Unity

Audio

56

Efectos de Sonido en Videojuegos con Unity

57

Gestión de Música de Fondo en Videojuegos con Unity

58

Control de Volumen de Audio en Videojuegos con Unity

59

Gestión de Volumen Global en Videojuegos

60

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

Colisiones y Movimiento en Unity con Rigidbody 2D

14/60
Recursos

¿Qué es una colisión en Unity y cómo corregirla?

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".

¿Cómo configurar los límites del escenario?

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.

  1. Crea un GameObject vacío y nómbralo adecuadamente (por ejemplo, boundary).
  2. Añade BoxCollider2D y ajusta su escala para que se alinee con los bordes del escenario.
  3. Duplica este objeto y colócalo en las posiciones adecuadas para formar las paredes: Norte, Sur, Este y Oeste.

Esta técnica te permitirá asegurar que el personaje siempre permanezca en el área deseada del tablero de juego.

¿Cómo evitar que el personaje atraviese objetos?

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.

  1. Agregar un Rigidbody2D:
  • Localiza tu personaje en Unity.
  • Añade la componente Rigidbody2D.
  1. Configurar las opciones de gravedad:
  • Reduce la escala de la gravedad (Gravity Scale) a 0, ya que este no es un juego donde la gravedad es relevante.
  1. Eliminar la rotación no deseada:
  • Utiliza "Freeze Rotation" para impedir que el objeto rote tras colisiones.

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.

¿Cómo migrar el sistema de movimiento a un motor de físicas?

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.

¿Cómo ajustar la velocidad y el comportamiento al caminar?

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

Ordenar por:

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

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

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.