Crear offset 2D

totespare

Bueno, pues otra dudilla de las mias:

En esta ocasión estoy intentando crear un offset en un personaje 2D. El objetivo es crear X distancia de seguridad mínima, a partir de la cual el jugador pueda disparar, apuntando con el ratón. Esa distancia será justo la longitud del brazo del personaje. Es decir, quiero que no se pueda disparar desde la punta de mi pistola hacia el interior de mi personaje (para no poder suicidarme, básicamente).

Hasta ahora lo que he conseguido es algo muy vago y con eróticos resultados. Estoy calculando la posición del ratón, la del player, un radio (un poco a ojo, de momento tengo 0,73f) y comprobando si la posición del ratón es mayor que la del player+radio (también compruebo player-radio para la parte trasera y la de abajo del player). El resultado es nefasto xD. Sólo me funciona cuando apunto en las diagonales, con un ángulo un tanto ámplio, pero nada bueno vaya...

Antes tenía menos restricciones en la comprobación, y probando sólo en el eje Y, conseguía que toda la zona superior estuviera bien cubierta, pero al añadir el eje X, todo se va a la mierda >.<.

Os dejo el código de lo que tengo (la parte de rotar los brazos y de disparar no la pongo, no creo que tenga importancia):

spoiler
totespare

Nadie? :(

MTX_Anubis

A ver lo que quieres hacer es calcular la distancia entre 2 puntos y si esa distancia es menor que el offset pues que no dispare.

La distancia entre dos puntos no es más que la hipotenusa y como casi nos enseñó los simpson, la hipotenusa al cuadrado es igual a la suma de los cuadrados de los catetos:

h^2 = c1^2 + c2^2
h = sqrt(c1^2 + c2^2)

Los catetos es la diferencia entre las Xs y las Ys

c1 = X1 - X2
c2 = Y1 - Y2

Despejando variables queda lo siguiente:

x1 = mousePosition.x
x2 = transform.position.x
y1 = mousePosition.y
y2 = transform.position.y

offset = Math.Sqrt(Math.Pow(x1 - x2) + Math.Pow(y1 - y2))

if (offset > armRadius) Fuego!
1 respuesta
totespare

#3 Pues así lo he hecho, solo que como han dicho por el grupo, he usado el Vector2.distance, en vez de calcular todo a mano.

En resumen, he calculado la posición del ratón, la del player, he sacado la distancia con Vector2.distance, y si era mayor que mi radio predefinido, dejaba disparar, y si no, pues no.

Gracias!

Usuarios habituales

  • totespare
  • MTX_Anubis