Noticias

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

"Orbitar" un objeto en 2D. Mas.

Iniciado por Srare, Febrero 01, 2018, 03:31:27 AM

Tema anterior - Siguiente tema
Febrero 01, 2018, 03:31:27 AM Ultima modificación: Febrero 01, 2018, 08:22:46 AM por pioj
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


Cita de: lightbug date=1517456901podés usar RotateAround para orbitar alrededor de cualquier punto:
   
   
      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..

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?

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!

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

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? 

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.

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;
}

 
 

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

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 

Etiquetas: