Noticias

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

Como mover un objeto a un punto específico en un tiempo definido

Iniciado por Phantom3D, Enero 31, 2018, 05:38:53 PM

Tema anterior - Siguiente tema
Enero 31, 2018, 05:38:53 PM Ultima modificación: Enero 31, 2018, 05:48:38 PM por Phantom3D
Bueno la pregunta que tengo es la siguiente. En el desarrollo de este videojuego nos surgen unos problemas que os voy a preguntar si es posible hacerlo en unity.

En la imagen se puede ver 2 iconos . 1 el que representa la ciudad, y otro icono que es el que representa el enemigo / numero de enemigos (la misión por completar)

Al seleccionar la imagen, está bien calculado, basando la distancia a la ciudad, el tiempo que tardará en recorrer el "soldado" desde la ciudad a la misión.

Pero cual es el problema. Que va a velocidad "x1" , al cambiar la velocidad por ejemplo a x10, ahí el personaje (el icono, sigue a x1 a su bola), y los tiempos no cuadran con la velocidad marcada

Alguien sabe cual es la solución de : Como mover un objeto a un punto específico en un tiempo definido en ir y volver , y al cambiar la velocidad del icono del soldado (el tiempo de la misión se reduzca)


Digamos que el resultado de la misión-combate ya está simulado, y el icono va a su posición y vuelve a la ciudad. 

Se calcula de esta manera actualmente :

para calcular la distancia utilizamos un la magnitud de la resta de las dos posiciones (La de la misión y la de la tropa). Y el tiempo utilizamos la división entre la distancia y la velocidad. Pero la tropa igualmente va lento o muy rápido y no llega al tiempo esperado
 




Añado un video explicativo (espero que sirva un poco) XD
 
icono.mp4

Hola fantasma tridimensional, mira, estaría bueno ver el código, como es que realizás el movimiento, para darte una solución parecida, pero bueno, mover un obj del punto A al B linealmente lo podés lograr de la forma que quieras, con moveToward, haciendo un lerp, con una función predefinida (o incluso una AnimationCurve, estilo ping pong por ej), pero bueno acá lo que tenés que hacer es simplemente elegir una velocidad y aplicarla en tu método de movimiento (hablo del ícono), no es más que eso realmente. La velocidad se traduce en cuanta distancia hacés, si elegís un método "de A a B" (se va a traducir en el factor t) y si elegís aplicar directamente la velocidad (basada en deltaTime) se traduce en la delta de posición que recorrés.
 
Entonces, por ej, si usas MoveToward:
 

deltaPos = velocity * Time.deltaTime;
posicionActual = Vector2.MoveToward(posicionActual,posicionFinal,deltaPos);

 
o si usas un Lerp:
 

// para tiempoTranscurrido = tiempoLlegada tenés un t = 1
// podrías usar tambien la propia distancia...
t = tiempoTranscurrido / tiempoLlegada;   
posicionActual = Vector2.Lerp(posicionInicial,posicionFinal,t);

 
Pero te digo, no se como es que conectás ese calculo con el método de movimiento del icono


Gracias, parece ser que lo ha conseguido con algo similar! :D

Etiquetas: