Noticias

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

Hacer que vuelva un objeto

Iniciado por Jony, Febrero 15, 2017, 02:16:14 AM

Tema anterior - Siguiente tema
Tengo un objeto que lo lanzo, y me gustaria que tras 2 segundos ese objeto retornase a mi posicion del player en donde este.
 
 
 
Como podria hacer que vuelva?
 
El player mientras el objeto es lanzado se puede menear y me gustaria que ese objeto me "siguiese hasta la posicion que le digo.
 
He conseguido que al pasar los dos segundos el objeto se posicione en el sitio donde yo le digo pero es de golpe, y quiero que venga meneandose, vamos viajando por el escenario. jejejeje
 
He probado con Translate pero no consigo lo que quiero, igual hago algo mal. Haber si me podeis orientar...
 
 
 
 
 
Un saludo

ahh este es uno de esos topics que vas construyendo la solucion con el pasar de los post jajaj. No se a que te referis con "menear". Te pregunto:
 
- el objeto tiene que volver directamente hacia el player, o debe respetar la trayectoria original? (Rojo = player )
 

 
-> Si fuera de 1 podes ir tomando n muestras de las posiciones del player cada T segundos e ir guardandolas en supongamos n lugares maximos (arreglo o lista), y especificando en el proyectil que vaya siguiendo dichas posiciones una por una es su camino de vuelta. Cuando llega a uno se elimina del contenedor y se toma una nueva muestra.
 
-> Si es 2 mucho mas facil volves directamente, el target = Player.transform.position.
 
Como metodo podrias interpolar la posicion del proyectil vs la de destino, pero cuando este llegando a una posicion de las muestras se va a ver como tirones de un punto a otro. O usar el translate (o el transform directamente, es lo mismo) pero va directamente de un punto a otro.
 
La otra es que a partir de toda la trayectoria determinar una curva suave. Q ni idea.
 
 

Cita de: lightbug date=1487123728ahh este es uno de esos topics que vas construyendo la solucion con el pasar de los post jajaj. No se a que te referis con "menear". Te pregunto:
   
   
      - el objeto tiene que volver directamente hacia el player, o debe respetar la trayectoria original? (Rojo = player )
   
   
      
   
   
      -> Si fuera de 1 podes ir tomando n muestras de las posiciones del player cada T segundos e ir guardandolas en supongamos n lugares maximos (arreglo o lista), y especificando en el proyectil que vaya siguiendo dichas posiciones una por una es su camino de vuelta. Cuando llega a uno se elimina del contenedor y se toma una nueva muestra.
   
   
      -> Si es 2 mucho mas facil volves directamente, el target = Player.transform.position.
   
   
      Como metodo podrias interpolar la posicion del proyectil vs la de destino, pero cuando este llegando a una posicion de las muestras se va a ver como tirones de un punto a otro. O usar el translate (o el transform directamente, es lo mismo) pero va directamente de un punto a otro.
   
   
      La otra es que a partir de toda la trayectoria determinar una curva suave. Q ni idea.
   
   
       
   


Me hiciste reir con lo primero y los miticos dibujos del paint!.
 
Aclaranos que quieres y te ayudaremos mejor!

Visita http://www.programacionwh.com encontraras tutoriales y muchas cosas .


Tambien puedes visitar mi canal de YouTube https://www.youtube.com/channel/UClSCTn0wPN1iFjED0yaoJUA



Febrero 15, 2017, 05:14:36 PM #3 Ultima modificación: Febrero 15, 2017, 05:15:46 PM por Jony
La segunda opcion. jejejeje
 
Lanzo un objeto, y a los dos segundos el Player se ha meneado por el escenario y que el objeto vuelva al punto donde este el Player en ese momento.
 
No de golpe, es decir no quiero que aparezca de repente donde este el Player(Que eso ya lo he conseguido con transform) sino que venga recorriendo el camino. Creo que con translate pero lo he intentado y no he podido. No se como explicarlo. :)
 
 
 
Un saludo y gracias

Yo seguiré este post que me interesa la información!, pregunté en el foro de unity en inglés, pero se ve que mi pregunta no fue muy adecuada o de un modo no muy claro y creo que directamente los moderadores la chaparon. xDD
 
Aquí hay mucha gente "poderosa" como yo digo con mucha sabiduría!!, a ver si nos iluminan!

Febrero 15, 2017, 10:26:58 PM #5 Ultima modificación: Febrero 15, 2017, 10:45:38 PM por lightbug
Cita de: ProgramacionWH date=1487169068Me hiciste reir con lo primero y los miticos dibujos del paint!.
   
   
      Aclaranos que quieres y te ayudaremos mejor!
   


Jaja el paint nunca falla.
 
Con esto, (hecho muy por arriba) te va a ***guir directamente como el metodo 2, tomando muestras de las posiciones, vos seteas cuantas y cada que intervalo. El script va en el ***guidor, el Transform target es el ***guido. Obviamente lo tenes que modificar a tu gusto, lo que vale es la idea.
 

   public Transform target;
List<Vector3> pos = new List<Vector3> ();  
     
bool activado = false;
     
float time = 0;
float intervaloTiempo = 0.5f;
int limitesSamples = 10;
float speed = 4;
 
void ***guir()
{
   Vector3 diferencia = pos[0] - transform.position;
   if (diferencia.magnitude < 0.4f) {
      pos.RemoveAt (0);
   } else {
      transform.position += diferencia.normalized * speed * Time.deltaTime;
   }
   if (pos.Count == 0)
      activado = false;
}
void Update () {
   
   if (Input.GetKeyDown (KeyCode.K))
      activado = true;
 
   if (!activado)
      return;
   if (pos.Count <= limitesSamples) {
      if(pos.Count == 0)
         pos.Add (target.position);
      
      if (time > intervaloTiempo)
         pos.Add (target.position)      
      else
         time += Time.deltaTime;
      
   }
   ***guir ();
}
}

 
Fijate que se activa cuando le das "K", podes hacerlo como quieras, que se active despues de x segundos como decis.

Si utilizas Traslate el objeto soltada tras los dos segundo trazara una linea recta, desde el punto que esta, hacia el player.

Usa transform.Traslate con el vector resultante entre la posicion del player y el objeto soltado.

Ya si quieres usar otro camino es otra cosa.

Etiquetas: