Я пытаюсь получить основную игру онлайн и попал в некоторые проблемы. Я следовал this tutorial, который действительно хорош, и все работает, но одно, интерполяция.Unity Online Interpolation Lerp Мерцание 2D Gameobject
Без интерполяции у меня слишком много проблем с задержкой (другой игрок «сильно отстает»). Я пытался следовать учебник, добавив
void FixedUpdate()
{
if (networkView.isMine)
else{
syncTime += Time.deltaTime;
rigidbody2D.position = Vector3.Lerp(syncStartPosition, syncEndPosition, syncTime/syncDelay);
}
И с помощью этого метода:
void OnSerializeNetworkView(BitStream stream, NetworkMessageInfo info)
{
Vector3 syncPosition = Vector3.zero;
if (stream.isWriting)
{
syncPosition = rigidbody2D.position;
stream.Serialize(ref syncPosition);
}
else
{
stream.Serialize(ref syncPosition);
syncTime = 0f;
syncDelay = Time.time - lastSynchronizationTime;
lastSynchronizationTime = Time.time;
syncStartPosition = rigidbody2D.position;
syncEndPosition = syncPosition;
}
}
Но теперь другой игрок невидим, когда не движется, и виден, но мерцающий много при движении (мерцающий так я почти не вижу этого). Так как мой метод вызывается из FixedUpdate, мне интересно, просто ли в этом игровом объекте так много освежает, что я его даже не вижу. Это возможно?
В любом случае, есть ли у вас идея о том, как исправить это?
Благодарим вас за помощь!
PS: Я пытался залезть только в том случае, если syncTime/syncDelay < 1.0, чтобы убедиться, что я не экстраполирую, но это ничего не изменило.
PPS: Когда я использую интерполяцию, он мерцает много, но я вижу, что позиция правильная, она не отстает, как раньше, поэтому лучше всего было бы решить, как сделать мою интерполяцию, а не удалять ее.
Я попытался поместить интерполяцию lerp в Update(), но это изменило вещь. Использование transform или rigibody2D ничего не изменило. Спасибо, в любом случае. –