Noticias

¡RECUERDA QUE SI ERES UN NUEVO USUARIO, DEBES PRESENTARTE PARA PODER PUBLICAR MENSAJES! | TENEMOS CANAL OFICIAL DE TELEGRAM: t.me/unity3dspain

Temas recientes

Rotación en dirección del mouse

Iniciado por nomoregames, Diciembre 07, 2019, 03:50:00 PM

Tema anterior - Siguiente tema
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; 
 


   
eature=oembed">

 
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.
 
Gracias por tu atencion.
 
 
 
 
 
 
 
 

Cita de: nomoregames date=1575730200el 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(...   
// ...
}

 
 

Diciembre 07, 2019, 08:55:33 PM #2 Ultima modificación: Diciembre 07, 2019, 09:24:53 PM por nomoregames
¡Gracias por tu respuesta lightbug!, pero sigo con dudas
 
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

Cita de: nomoregames date=1575748533a 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:
 

 
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).
 
Cita de: nomoregames date=1575748533y... 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.

Pues nada, con esta explicación, arrancaste de raíz mis dudas.
 
Es un placer aprender con este pedazo de comunidad :).

Etiquetas: