Transform Location, Coordenadas Relativas a Mundo en Unreal

Video thumbnail

¿Cómo podemos mover este personaje del punto A al punto B en Unreal engine?

Esto es útil cuando tenemos un enemigo o similar y queremos que se desplace automáticamente entre los puntos A y B.
Para esto, usamos un par de vectores, el A que es global:

Vector A

Y el B, que es relativo y en el cual, activamos el widget para poder visualizarlo y moverlo:

Vector B

Ahora bien, como hacemos que se mueva del punto A a B. Es muy sencillo. Realmente esta no es la parte principal que quiero explicar, pero igual te la voy a mencionar.

El Cronograma y la Interpolación
Aquí tenemos el cronograma. Como siempre, hay muchas formas de hacerlo, pero esta sería la más tradicional:

Desplazamiento A a B

Posiciones Globales y Relativas

La posición A la inicializo en el constructor, obteniendo la posición global del personaje. Hasta aquí todo bien, ya que A siempre será el punto de retorno.

El problema surge con la posición B, que es dinámica y relativa.

Si B está en 0,0,0, equivale a la posición A.

A partir de ahí se desplaza, pero sigue siendo relativa.

Una posición global sería la de un objeto en el mundo (ejemplo: la araña).

Una posición relativa depende de otra (ejemplo: la luna respecto a la tierra) y en este ejemplo, la tierra tendría una posición global en el universo.

Por eso, si muevo B a (300,0,0), esa no es una posición global, sino relativa a A. Para convertirla en global tendría que sumar las coordenadas de A y de B.

El Problema de las Rotaciones

Hasta aquí parece sencillo, pero el verdadero dilema aparece con las rotaciones.

Si solo sumara A y B, funcionaría bien para posiciones, pero no para rotaciones.
Probé varias soluciones. Una de ellas era:

  • Obtener la rotación del personaje.
  • Multiplicar esa rotación por B.
  • Luego sumar la posición de A.
Rotaciones y otros calculos

Esto funcionaba hasta cierto punto, pero al aplicar rotaciones más complejas, los resultados se rompían.

La Solución Correcta: Transform Location


Finalmente descubrí un nodo que resuelve este problema: Transform Location.
Este nodo transforma una posición local a una posición global.

El flujo es simple:

  • Obtengo la posición A (global).
  • Uso el nodo GetWorldTransform para acceder a la escala, traslación y rotación.
  • Paso B (relativo) por el nodo Transform Location.
  • Voilà, ahora B está convertido a coordenadas globales.
  • Con esto, cualquier rotación funciona correctamente y el movimiento se mantiene estable.
Uso de Transform Location

Conclusión

Si quieres mover un objeto de posiciones locales a globales, lo más práctico es usar el nodo Transform Location.

De esta forma puedes trabajar con interpolaciones, movimientos relativos y rotaciones sin romper el sistema.

Acepto recibir anuncios de interes sobre este Blog.

Mostramos como podemos desplazar un mesh de A a B en donde A tiene una posición de mundo y B una posición relativa.

| 👤 Andrés Cruz

🇺🇸 In english