Jump to content
Sign in to follow this  
nomoregames

ANSWERED Rotación en dirección del mouse

Recommended Posts

Hola de nuevo 
Tengo otra duda.

Estuve rompiendome la cabeza intentando hacer que un objeto apuntara en la dirección que se encontraba el ratón, pero como con mis conocimientos actuales no consegui llegar a ningun lado decidi buscar algun tutorial o post en el que explicaran como hacerlo, y encontre este video; 

Hola de nuevo 
Tengo otra duda.

Estuve rompiendome la cabeza intentando hacer que un objeto apuntara en la dirección que se encontraba el ratón, pero como con mis conocimientos actuales no consegui llegar a ningun lado decidi buscar algun tutorial o post en el que explicaran como hacerlo, y encontre este video; 

aqui dejo el codigo

private void Update()
    {
        Vector3 mousePosition = Input.mousePosition;
        mousePosition = Camera.main.ScreenToWorldPoint(mousePosition);


        Vector2 direccion = new Vector2(
            mousePosition.x - transform.position.x,
             mousePosition.y - transform.position.y
);

        transform.up = direccion;
    }

el codigo funciona, pero con eso no me vale, necesito saver como funciona para aprender realmente a programar...

la cosa seria que no entiendo practicamente nada del codigo.

 

Alguien podria explicarme como si yo tuviera tres años, que hace cada cosa y por que?

Lo agradeceria mucho:28_hugging:.

Gracias por tu atencion.

 

 

 

 

Share this post


Link to post
Share on other sites
3 hours ago, nomoregames said:

el codigo funciona,

Recién caigo que "transform.up = direccion" es válido, siempre pensé que era propiedad de "lectura" (getter), es decir que no podías asignarle nada. En fin...

El código lo que hace es:

private void Update()  //o protected o public da lo mismo
{
	// Toma la posición actual del mouse en coordenadas de pantalla (píxeles)
	Vector3 mousePosition = Input.mousePosition;
  
 	// Transforma las coordenadas anteriores en coordenadas en el mundo
 	mousePosition = Camera.main.ScreenToWorldPoint(mousePosition);

	// crea el vector de dirección, haciendo la diferencia entre mouse - objeto
  	// Creo que con "Vector2 direccion = mousePosition - transform.position" debería dar bien
    Vector2 direccion = new Vector2(
    	mousePosition.x - transform.position.x,
        mousePosition.y - transform.position.y
	);
  
  	// Un tip: siempre que se hable de dirección asegurate de Normalizar los vectores
  	// direccion.Normalize();
  
  
  	//Le impone que el up (ya que será el vector de "Looking" sea la dirección), entonces termina mirando en la dirección
	transform.up = direccion;
  
}

Una ultima cosita, nunca uses "Camera.main" en update, ponelo así:

Camera mainCamera = null;

void Awake()
{
	mainCamera = Camera.main;
}

void Update()
{
	Vector3 mousePosition = mainCamera.ScreenToWorldPoint(...	

	// ...
}

 

  • Like 1

Share this post


Link to post
Share on other sites

¡Gracias por tu respuesta lightbug!, pero sigo con dudas:7_sweat_smile::7_sweat_smile::7_sweat_smile:

a que te refieres exactamente con

crea el vector de dirección, haciendo la diferencia entre mouse - objeto

, tampoco se usar lo de normalizar, pero me lo miro en la documentación de unity y salgo de dudas

y... en que momento se convierten esos vectores en rotacon, y por que.

En todo caso, muchisimas gracias por haber resuelto parte de mis dudas.

01111001 00100000 01110001 01110101 01100101 00100000 01101100 01100001 00100000 01100110 01110101 01100101 01110010 01111010 01100001 00100000 01110100 01100101 00100000 01100001 01100011 01101111 01101101 01110000 01100001 11000011 10110001 01100101

Edited by nomoregames

Share this post


Link to post
Share on other sites
1 hour ago, nomoregames said:

a que te refieres exactamente con


crea el vector de dirección, haciendo la diferencia entre mouse - objeto

, tampoco se usar lo de normalizar, pero me lo miro en la documentación de unity y salgo de dudas

De nada!

Sí eso mismo, necesitas un vector de dirección, que es un vector de magnitud 1, solamente lo que varía es la dirección del mismo. En el script lo creo haciendo una resta de vectores y luego (mi parte) normalizando el resultado. Esto es algebra vectorial pura, mirá la siguiente imagen:

400px-Vector_subtraction.png

En la imagen, donde termina el vector (la flecha) es donde estáría la posición de un objeto, en este caso tenés la posición de quien tenga puesto ese script (transform.position) y la posición del mouse pasado de screen a world (mousePosition). A sería mousePosition y B transform.position, si hacés la resta te queda el vector negro.

Todo vector arranca del origen, se suele poner al vector negro así para explicar mejor el concepto, pero los vectores no tienen posición de arranque, todos parten de (0,0,0).

1 hour ago, nomoregames said:

y... en que momento se convierten esos vectores en rotacon, y por que.

Ningun vector se convierte en rotación (tecnicamente hablando) vectores y quaternions son dos cosas distintas, pero tratando de entender a lo que te referís, supongo que ese vector es "usado" para lograr la rotación deseada en la última línea. Cuando decís "transform.up = dir" estás recalculando la rotación propio del objeto que tenga el script haciendo que su "up local" concuerde con el vector de dirección, ahí es donde pasa la magia. ¿Es la única solución? para nada, incluso es una solución bastante fea, pero funciona al parecer.

  • Like 1

Share this post


Link to post
Share on other sites
Sign in to follow this  

×
×
  • Create New...