У меня проблема, когда я пытаюсь плавно переместить игровой объект.
Я получаю каждую секунду по протоколу TCP позицию, в которую должен переместиться мой Gameobject. Итак, у меня есть начальная позиция, моя конечная позиция, я могу рассчитать расстояние между двумя позициями, и я знаю, что мой Gameobject должен переместиться. с постоянной скоростью до моей конечной точки за 1 секунду.
Я пробую 3 решения: Learp, MoveToward и SmoothDamp, но ни одно из них не работает, мой Gameobject просто телепортируется из точки A в точку B. каждый раз.
Вот что я пробую в своем коде (мой Gameobject упоминается в словаре, мой Gameobject - это самолеты):
// Distance between my 2 points
float step = Vector3.Distance(planeId_Object_Dictionnary[newPlane.Flight].transform.position, new Vector3((float)newPlane.X, (float)newPlane.Afl / (3.2808f * 1852f), (float)newPlane.Y));
//Use of Lerp
//planeId_Object_Dictionnary[newPlane.Flight].transform.position = Vector3.Lerp(planeId_Object_Dictionnary[newPlane.Flight].transform.position, new Vector3((float)newPlane.X, (float)newPlane.Afl / (3.2808f * 1852f), (float)newPlane.Y), step);
//Use of MoveTowards
planeId_Object_Dictionnary[newPlane.Flight].transform.position = Vector3.MoveTowards(planeId_Object_Dictionnary[newPlane.Flight].transform.position, new Vector3((float)newPlane.X, (float)newPlane.Afl / (3.2808f * 1852f), (float)newPlane.Y), step);
//Use of SmoothDamp
//planeId_Object_Dictionnary[newPlane.Flight].transform.position = Vector3.SmoothDamp(planeId_Object_Dictionnary[newPlane.Flight].transform.position, new Vector3((float)newPlane.X, (float)newPlane.Afl / (3.2808f * 1852f), (float)newPlane.Y), ref newPlane.GroundSpeed, 1);
Код - это функция, которая вызывается в моем обновлении следующим образом:
void Update () {
lock (threadLock)
{
// Message receive from my TCP Protocol
while (q_orders.Count > 0)
{
switch (q_orders.Dequeue())
{
case OrderType.trackmovedevent:
aircraftMajInfos(q_args.Dequeue()); // My function to move my Object
break;
}
}
}
}