es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Trigonometría + Ángulos – Objeto rotando alrededor del jugador y mirando en dirección al ratón.

No entiendo cómo funciona este código y estoy buscando una explicación. Este código está dentro de una función de actualización, actualizando constantemente la ubicación del objeto.

Al “enfrentar la dirección del mouse” me refiero a que el objeto es como la tierra orbitando alrededor del sol, por ejemplo, pero tú eliges dónde se encuentra actualmente en su línea de rotación alrededor del sol.

“`public GameObject player;
private Vector3 v3Pos;
private float angle;
private readonly float distance = 0.16f;

private void Update()
{
v3Pos = Input.mousePosition;
v3Pos.z = (player.transform.position.z –
Camera.main.transform.position.z);
v3Pos = Camera.main.ScreenToWorldPoint(v3Pos);
v3Pos -= player.transform.position;
angle = Mathf.Atan2(v3Pos.y, v3Pos.x) * Mathf.Rad2Deg;
if (angle < 0.0f) { angle += 360.0f; }
transform.localEulerAngles = new Vector3(0, 0, angle);

<pre><code> float xPos = Mathf.Cos(Mathf.Deg2Rad * angle) * distance;
float yPos = Mathf.Sin(Mathf.Deg2Rad * angle) * distance;
transform.localPosition = new Vector3(player.transform.position.x +
xPos * 4, player.transform.position.y + yPos * 4, 0);
</code></pre>

}“`

Encontré este código en un video que hace que un objeto (como un arma) gire alrededor del jugador y siga el mouse al mismo tiempo, pero no entiendo cómo funciona. ¿Cómo funciona? Además, no sé dónde está el video en este momento, pero lo encontraré si es necesario.

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    El código que proporcionaste es responsable de actualizar la ubicación de un objeto en relación a la ubicación del jugador y la posición del mouse. El objetivo principal de este código es hacer que un objeto gire alrededor del jugador y se enfrente a la dirección del cursor del mouse.

    En primer lugar, el código declara algunas variables, como el objeto de juego del jugador, un vector3 posición (v3Pos) que se utilizará para contener la posición del cursor del mouse, una variable de ángulo para almacenar el ángulo de rotación y una variable constante llamada distancia, que se establece en 0.16f en este caso.

    La función Update() es donde sucede la magia. En primer lugar, obtiene la posición actual del cursor del mouse usando Input.mousePosition. Luego, establece la posición z de v3Pos en la diferencia entre la posición z del jugador y la posición z de la cámara para asegurarse de que el vector de posición resultante esté en el mismo plano que el objeto del jugador. Después de eso, convierte la posición del mouse en 2D en una posición del mundo en 3D hacia la cual el objeto se puede mover.

    A continuación, resta la posición del jugador de v3Pos para obtener un vector entre el jugador y el cursor. Luego, utiliza la función Mathf.Atan2 para calcular el ángulo entre los dos objetos, lo convierte de radianes a grados usando Mathf.Rad2Deg y lo almacena en la variable de ángulo. La variable de ángulo se normaliza para que siempre tenga un valor entre 0 y 360 grados.

    Finalmente, este código actualiza la rotación del objeto estableciendo su localEulerAngles en función de la variable de ángulo. También actualiza la posición del objeto calculando los desplazamientos de posición x e y desde el jugador en función del ángulo y la distancia, y luego estableciendo la localPosition del objeto utilizando esos valores.

    En general, este código asegura que el objeto siempre esté orientado hacia el cursor del mouse y siga un camino circular alrededor del objeto del jugador.

Comments are closed.