Saltar al contenido principal

Unity - Personajes (Colisionadores + particulas) , Rigs y constraints

Descripción General

Esta guía funciona para aprender sobre colisionadores básicos y como aplicarlos en particulas además de aprender a utilizar constraints en conjunto con rigs

Guía de trabajo

Animation Rigging

Animation rigging es un package gratis de unity que permite crear rigs secundarios para personajes y objetos animados, que se integran fácilmente con animaciones existentes y permiten agregar restricciones de posición o rotación, ajustes de postura, entre otros.
Es compatible con Timeline y Animator.

image-20250619-221326.png

Bone Renderer

Mediante animation rigging podemos obtener una visualización sencilla de nuestro rig original en unity, además de que podemos personalizar nuestra visualización del rig, esto no se vera cuando le demos play a nuestra escena. Para agregarlo, seleccionamos nuestro objeto y en la parte superior nos vamos a animation Rigging >Bone Renderer Setup

image-20250619-221612.png

Rig Effectors

Estos nos funcionaran como controladores de nuestro rig en unity, podemos cambiarles el color

image-20250619-222836.png

Multi - Aim Constraint

Este Sirve para casos donde necesitas que un hueso mire hacia uno o más objetivos, para poder utilizar este constraint necesitamos crear nuestro rig secundario seleccionando en la parte superior Rigging > Rig Setup esto nos creara un componente que contenga nuestro rig secundario.
Explicaremos cada uno de sus componentes principales:
Weight: Controla cuanto afecta el constraint al objeto
Constrained object: Aqui agregas el objeto que va a ser afectado ej. el hueso de la cabeza
Aim Axis: Define que del objeto apunta hacia el objetivo
Source Objects: Define que objetivos apuntará según su peso
Min Limit - Cuanto es lo minimo que puede rotar
Max Limit - Cuanto es lo maximo que puede rotar
Mantain Offset: Si activamos este valor, el objeto conservara su posición inicial

image-20250620-142136.png

Ejemplo
Una vez creado nuestro rig agregaremos dentro de este un Empty (en este caso sera nuestra cabeza) y en su inspector Add Component >Multi Aim Constraint

image-20250620-141559.png

En constrain object asignamos el hueso de nuestra cabeza. Agregamos un empty nuevo dentro de nuestro empty que se llame target, en la esquina inferior derecha tenemos un mini inspector de Animation Rigging, si le damos click al target, podremos tener un gizmo para nuestro target. Si damos play y movemos nuestro target, veremos que funciona y si teniamos aisgnado algún idle funciona junto con el idle.

image-20250620-152616.png

IK en unity
Para crear un ik en unity necesitas ir a animation Rigging > Rig Setup una vez que tengas tu rig crea un nuevo GameObject y nómbralo Arm_IK_Right.
Agrega el componente Two Bone IK Constraint.
Este constraint requiere 3 referencias:
Root: Hombro (ej. RightUpperArm)
Mid: Codo (ej. RightLowerArm)
Tip: Mano (ej. RightHand)
Si colocamos el asset de Tip, podemos hacer que automáticamente nos asigne los otros huesos, además nos creara un hint y un target

image-20250620-201405.pngimage-20250620-200945.png

Como queremos que el target sea la mano ya que va a ser lo que controlemos, necesitamos copiar la posición de la mano y pegársela al target. El hint lo acomodaremos atrás del codo ya que va a ser nuestro controlador de este.

image-20250620-202738.png

Consideraciones

Para poder agregar el ik en animaciones previas, hay que duplicar la animación o ponerlo como override en timeline

Guía de trabajo

Constraints

¿Qué son? Son componentes que vinculan ya sea la posición, rotación o escala de un objeto a otro. Estos vienen de default con unity, no es necesario bajar algún paquete.
Para agregar un constraint, seleccionamos el objeto de la jerarquía que llevaría el constraint Le damos click en Add Component > Aim Constraint.
Estos son los tipos de constraints que hay:
***Aim Constraint:***Hace que un objeto oriente un eje especifico hacia un objetivo como si estuviera apuntando hacia él. A diferencia del Look At, tiene más ajustes y es más preciso.
Look At Constraint: Hace que un objeto siempre mire hacia otro.
***Parent Constraint:***Combina posición y rotación
Position Constraint: El objeto copia la posición de otro.
Rotation Constraint: El objeto copia la rotación de otro.
Scale Constraint: El objeto iguala la escala de otro.

Componentes generales de los constraints en inspector:

Sources: Lista de targets con los cuales el objeto cumplirá el constraint
Weight: Cuánto influye ese target individualmente. Puedes tener más de uno y mezclar pesos para blending.
Is Active: Si esta activado o no el constraint

Ejemplos de cuando es aplicable cada uno:

Situación / ConstraintPositionRotationScaleParentLookAtAim
Seguir posición de un objeto (ej. marcador)✔️✔️
Girar igual que otro objeto✔️✔️
Imitar escala de otro objeto✔️
Mover objeto con posición y rotación (tipo padre)✔️✔️✔️✔️
Cabeza que mira al jugador✔️✔️✔️✔️
Ojos que siguen a un objetivo✔️✔️✔️
Cámara que sigue y mira al jugador✔️✔️✔️✔️
Arma o accesorio que cambia de mano✔️✔️✔️✔️
Parte de un rig que apunta con eje personalizado✔️✔️✔️✔️
Rig IK (manos/pies que siguen un blanco)✔️✔️✔️✔️
✔️✔️ = ideal / recomendado ✔️ = se puede usar ❌ = no recomendado

Ejemplo de Aim Constraint usado en Proyecto

Para un proyecto ocupábamos un rig mecánico el cual el funcionamiento sería que el usuario pudiera mover la cabeza de la maquina y sus dos brazos de la maquina pudiera adaptar su posición y rotación siguiendo la cabeza.
Para esto se agregó a esta máquina un rig  y en unity un aim constraint que siguiera la cabeza a mover

image-20250619-142211.pngimage-20250619-142236.pngimage-20250619-142326.png

Componentes específicos del aim constraint:

Aim Axis :Define qué eje del objeto se usará como el "frontal", el que apunta hacia el target. Por ejemplo, +Z si tu objeto tiene el eje Z hacia adelante.
Up Axis: Define qué eje representa el "arriba" del objeto. Esto es clave para evitar que el objeto se rote extraño o al revés. Usualmente +Y.
World Up Type: Controla cómo se interpreta el "arriba" en el mundo para estabilizar la rotación.
- None: No se considera un arriba especifico (puede causar rotaciones no deseadas)
- Scene Up: Usa el eje Y del mundo como up (0, 1, 0). Útil para objetos que deben permanecer verticales.
- Object Up: Usa otro objeto como referencia del "arriba".
- Object Rotation Up: Usa la rotación del objeto de referencia para definir el up.
- Vector: Usa un vector definido manualmente como referencia hacia arriba.
World Up Object (si aplica) Se muestra si eliges Object Up o Object Rotation Up. Aquí eliges el transform que se usará como orientación "arriba".
World Up Vector (si aplica) Se muestra si eliges Vector como World Up Type. Defines manualmente el vector up (ej. (0, 1, 0)).

Consideraciones

Es importante checar bien las situaciones para cada constraint y probarlos para ver que tal funcionan, recordemos que para varias situaciones no hay solo una opción disponible.

Guía de trabajo

Colliders + Particulas

Para poder utilizar colisiones en nuestras particulas es importante checar que se tenga colisionador nuestro objeto, para esto nos iremos al inspetcor de nuestor objeto >Add Component > Aqui elegiremos cual collider queremos, si un mesh collider, box collider o capsule collider
Una vez que ya tengamos eso preparado nos iremos a nuestra particula y le daremos check al apartado de collision, aqui nos encontraremos con varias opciones:
Type: Tipo de colisión que usará el sistema. Opciones:
– Planar: Usa planos definidos manualmente como colisionadores.
– World: Usa colliders del mundo real (BoxCollider, SphereCollider, MeshCollider, etc.)
– Planes: Permite definir hasta 6 planos específicos como colisionadores.
Mode: Aquí solemos utilizar la opción 3D
Dampen:  Reduce la velocidad de las partículas al colisionar (0 = sin freno, 1 = se detiene).
Bounce Qué tanto rebota la partícula (0 = nada, 1 = rebote perfecto).
Collide: Simplemente choca.
Kill: La partícula desaparece al colisionar.
Visualize Bounds: Muestra las cajas de colisión
Lifetime Loss: Qué porcentaje de vida pierde una partícula al colisionar. Ejemplo: 0.2 le quita 20% de vida.
Min Kill Speed: Si la velocidad es menor a este valor al colisionar, se destruye la partícula.
Max Kill Speed: Si la velocidad supera este valor al colisionar, se destruye la partícula.
Collides With: Selecciona qué capas pueden colisionar con las partículas. Usa el sistema de layers.
Enable Dynamic Colliders: Si está activado, permite colisión con objetos que se mueven. Útil para físicas activas.
Radius Scale: Escala el radio de colisión de cada partícula. Puede usarse para simular partículas más grandes.

Caso Problema de Colliders

Muchas veces si la geometría es compleja puede que el collision de partículas no funcione como debería. En estos casos lo que se puede hacer es asignar colliders a unas mallas con formas más básicas como el ejemplo que veremos a continuación:

image-20250619-205440.pngimage-20250619-205540.png

Consideraciones

En caso de utilizar colisionadores de formas básicas, con darle uncheck al mesh renderer es suficiente para que sigan funcionando sus colisionadores sin que veamos sus formas.

Enlaces de descarga

Los enlaces de descarga ya sean plugins o Assets.

Archivos Adjuntos

https://docs.unity3d.com/Packages/com.unity.animation.rigging@1.0/manual/index.html

trae gifs que muestran cada uno de los constraints

https://docs.unity3d.com/Packages/com.unity.animation.rigging@1.0/manual/ConstraintComponents.html

Comentarios

Comentarios generales o extras de la investigación.

Ventajas

Comentarios generales o extras de la investigación.

Desventajas

Comentarios generales o extras de la investigación.

Elaboró

Laura Soto