Unity Spain

Post Antiguos => General (Antiguo) => Mensaje iniciado por: Srare en Febrero 01, 2018, 03:31:27 AM

Título: "Orbitar" un objeto en 2D. Mas.
Publicado por: Srare en Febrero 01, 2018, 03:31:27 AM
Buenas gente, pues eso, como puedo "Orbitar" un objeto tomando como referencia un vector en especifico? Concretamente busco hacer lo del archivo adjunto.
Otra cosa totalmente aparte, como puedo hacer que un objeto(A) se mueva en direccion a otro objeto(B)? De tal forma que el objeto A siga indefinidamente y no se pare al llegar al punto objeto A?
 
 
Desde ya, muchas gracias! :D
 
2016-01-25-2216-56.mp4
 
AB.bmp
Título: "Orbitar" un objeto en 2D. Mas.
Publicado por: lightbug en Febrero 01, 2018, 04:48:21 AM
podés usar RotateAround para orbitar alrededor de cualquier punto:
 
https://docs.unity3d.com/ScriptReference/Transform.RotateAround.html (https://docs.unity3d.com/ScriptReference/Transform.RotateAround.html)
 
 
Título: "Orbitar" un objeto en 2D. Mas.
Publicado por: Srare en Febrero 01, 2018, 04:49:45 AM
Cita de: lightbug date=1517456901podés usar RotateAround para orbitar alrededor de cualquier punto:
   
   
      https://docs.unity3d.com/ScriptReference/Transform.RotateAround.html (https://docs.unity3d.com/ScriptReference/Transform.RotateAround.html)
   
   
       
   


Gracias, y en caso de querer "Aumentar la distancia" del centro ? Es decir, que orbite mas lejos del centro..
Título: "Orbitar" un objeto en 2D. Mas.
Publicado por: lightbug en Febrero 01, 2018, 04:52:49 AM
BUeno, eso lo tenés de tarea, si sabés que eso solamente te lo va a hacer girar alrededor de algo, y vos querés determinar el radio, entonces que tenés que hacer antes(o después) de ponerte a girar?
Título: "Orbitar" un objeto en 2D. Mas.
Publicado por: Srare en Febrero 01, 2018, 04:56:34 AM
Cita de: lightbug date=1517457169BUeno, eso lo tenés de tarea, si sabés que eso solamente te lo va a hacer girar alrededor de algo, y vos querés determinar el radio, entonces que tenés que hacer antes(o después) de ponerte a girar?
   


Es tan sencillo enserio? Es que llevo dos horas, me encontre con mucha pila de codigo y no pude hacerlo funcionar, si pude en 3D, pero me consta para 2D :c Ayuda pls jaja, solo se Programar por pasion n.n 
 
Cita de: lightbug date=1517457169BUeno, eso lo tenés de tarea, si sabés que eso solamente te lo va a hacer girar alrededor de algo, y vos querés determinar el radio, entonces que tenés que hacer antes(o después) de ponerte a girar?
   


Aunque ahora que lo dices, se me ocurre "Alargar" el punto de pivot del sprite 
 
Te comento como lo solucione, que me ayudaste a prender el foquito jaja, meti el objeto que debe rotar como Hijo del centro, entonces lo movi un poco mas lejos y ya :D 
Muchisimas gracias!
Título: "Orbitar" un objeto en 2D. Mas.
Publicado por: lightbug en Febrero 01, 2018, 05:15:07 AM
es muy simple, antes de rotar te moves a la distancia que quieras, luego empezás a rotar, a o alrevés, rotás y después acomodás la distancia, sea 2D o 3D, no te conviene tocar el pivot para nada, ni tampoco usar enparentamiento. 
 
saludos
Título: "Orbitar" un objeto en 2D. Mas.
Publicado por: Srare en Febrero 01, 2018, 05:17:55 AM
Cita de: lightbug date=1517458507es muy simple, antes de rotar te moves a la distancia que quieras, luego empezás a rotar, a o alrevés, rotás y después acomodás la distancia, sea 2D o 3D, no te conviene tocar el pivot para nada, ni tampoco usar enparentamiento. 
   
   
      saludos
   


Muchas gracias! Ahora, en caso de mover un objeto hacia una direccion? Como podria hacer master? 
Título: "Orbitar" un objeto en 2D. Mas.
Publicado por: lightbug en Febrero 01, 2018, 03:45:00 PM
Este el el proceso paso a paso de como mover tu objeto en una dirección (aplicando una velocidad conocida):
 

//elegís el punto de destino
public Vector2 target;
------------------------------------------------------------
//calculas la dirección (toda dirección siempre normalizada)
vector2 dir = (target - transform.position).normalized;
//seteas tu SPEED, (en magnitud)
float speed = 5; //5 unidades por segundo
//encontras tu VELOCITY (vectorial)
Vector2 velocity = speed * dir;
//encontras el delta de posición que te vas a mover (representación de Euler)
Vector2 deltaPos = velocity * Time.deltaTime;
//Movés tu objeto un deltaPos
objeto.transform.Translate(deltaPos);

 
A la hora de evitar que colisione con con otro objeto dependerá de como detectás al otro objeto (si hay uno o miles de ellos por ej), podés meterle un trigger y evaluar si toca o no, si no lo toca podés seguir moviendo... otra posibilidad es calcular la distancia al otro objeto, si es mayor a tanto estás permitido y podés moverte, no se bien que es lo que querés hacer.
Título: "Orbitar" un objeto en 2D. Mas.
Publicado por: Srare en Febrero 01, 2018, 04:05:16 PM
Cita de: lightbug date=1517496300Este el el proceso paso a paso de como mover tu objeto en una dirección (aplicando una velocidad conocida):
   
   

//elegís el punto de destino
public Vector2 target;
------------------------------------------------------------
//calculas la dirección (toda dirección siempre normalizada)
vector2 dir = (target - transform.position).normalized;
//seteas tu SPEED, (en magnitud)
float speed = 5; //5 unidades por segundo
//encontras tu VELOCITY (vectorial)
Vector2 velocity = speed * dir;
//encontras el delta de posición que te vas a mover (representación de Euler)
Vector2 deltaPos = velocity * Time.deltaTime;
//Movés tu objeto un deltaPos
objeto.transform.Translate(deltaPos);

   
      A la hora de evitar que colisione con con otro objeto dependerá de como detectás al otro objeto (si hay uno o miles de ellos por ej), podés meterle un trigger y evaluar si toca o no, si no lo toca podés seguir moviendo... otra posibilidad es calcular la distancia al otro objeto, si es mayor a tanto estás permitido y podés moverte, no se bien que es lo que querés hacer.
   


Muchas gracias! Lo solucioné así por si a alguien le sirve:
 

   private Vector3 normalizeDirection;
public Transform target; //El objeto hacia el que se trazara el recorrido
public float speed = 5f;  //Velocidad
void Start()
{
   normalizeDirection = (target.position - transform.position).normalized;
}
void Update()
{
   transform.position += normalizeDirection * speed * Time.deltaTime;
}

 
 
Título: "Orbitar" un objeto en 2D. Mas.
Publicado por: lightbug en Febrero 01, 2018, 04:07:36 PM
acordate que si el objeto target cambia de posicion ya no te sirve la dirección normalizada, te conviene recalcularla en Update y no en Start
 
salu2
Título: "Orbitar" un objeto en 2D. Mas.
Publicado por: Srare en Febrero 01, 2018, 04:15:11 PM
Cita de: lightbug date=1517497656acordate que si el objeto target cambia de posicion ya no te sirve la dirección normalizada, te conviene recalcularla en Update y no en Start
   
   
      salu2
   


Sisi, en este caso igualmente es un "Projectil" y funciona perfecto ahi :D