У меня движение осуществляется в мультиплеере, движение происходит так
// приём в клиенте движения
private void FixedUpdate(){
Vector3 pos = Obj.transform.position; // объект который двигаем и при этом его позиция передаётся по сети
if(InputUp){ pos.z += Speed * Time.deltaTime; }
if(InputDown){ pos.z -= Speed * Time.deltaTime; }
if(InputLeft){ pos.x -= Speed * Time.deltaTime; }
if(InputRight){ pos.x += Speed * Time.deltaTime; }
if(transform.position != pos){
NetworkSendData(pos); // посылается всем клиентам (кроме этого) требуемая позиция
}
Obj.PositionRequired = pos; // задаётся требуемая позиция объекту который двигаем
}
// контроль объекта на всех клиентах
// PositionRequired - приходит по сети
private void FixedUpdate(){
if(transform.position != PositionRequired){
transform.position = Vector3.Lerp(transform.position, PositionRequired, Speed * Time.deltaTime);
if(Vector3.Distance(transform.position, PositionRequired) < 0.002f){ transform.position = PositionRequired; }
}
}
То есть после движения на одном клиенте происходит движение в нём и отправляется координаты всем остальным.
Теперь о неполадках - в клиенте в котором происходит движение все гладко, в клиентах приёмниках движение происходит рывками, то есть движется плавно но с разной скоростью.
Вопрос как в данной ситуации добиться того чтобы на всех клиентах объект двигался с равной скоростью?