Лучший способ плавно переместить сетевой игровой объект?C#

Место общения программистов C#
Ответить
Anonymous
 Лучший способ плавно переместить сетевой игровой объект?

Сообщение Anonymous »

У меня возникла проблема при попытке плавно переместить игровой объект.

Я получаю каждую секунду через TCP Протокол позиции, в которой мой игровой объект должен переместиться. Итак, у меня есть начальная позиция, моя конечная позиция, я могу вычислить расстояние между двумя позициями и знаю, что мой игровой объект должен переместиться. с постоянной скоростью до конечной точки за 1 секунду.

Я пробую 3 решения: Learn, MoveToward и SmoothDamp , но ни один из них не работает, мой Gameobject каждый раз просто телепортируется из точки A в точку B.

Вот что я пробую в своем коде (мой игровой объект упоминается в словаре, мой игровой объект – это плоскости) :

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


Подробнее здесь: https://stackoverflow.com/questions/366 ... t-smoothly
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»