2015-10-23 2 views
1

По какой-то причине движение другого игрока «заикается». Я знаю, что это обычная проблема, с которой сталкиваются люди с Photon, поэтому было интересно, знает ли кто-нибудь, как я могу ее решить?Как исправить многопользовательское заикание?

Вот мой игрок код движения:

public float SmoothingDelay = 5; 

public void Start() 
{ 
    GetComponent<SmoothSyncMovement>().enabled = true; //This is the name of this script 
} 

public void OnPhotonSerializeView(PhotonStream stream, PhotonMessageInfo info) 
{ 
    if (stream.isWriting) 
    { 
     //We own this player: send the others our data 
     stream.SendNext(rb2D.position); 
     stream.SendNext(rb2D.rotation); 
    } 
    else 
    { 
     //Network player, receive data 
     correctPlayerPos = (Vector3)stream.ReceiveNext(); 

    } 
} 

public void Update() 
{ 
    if (!photonView.isMine) 
    { 
     Vector2 playerMovement = rb2D.position + velocity * Time.deltaTime; 
     rb2D.MovePosition(playerMovement);   
    } 

    if (photonView.isMine) 
    { 
     Vector2 playerMovement = rb2D.position + velocity * Time.deltaTime;  
     rb2D.MovePosition(playerMovement); 
    } 
} 
+0

Та же тема обсуждалась на форуме ExitGames: http://forum.photonengine.com/discussion/6821/other-players-have-flashing-stuterring-movement – photonians

ответ

1

сделать плавный переход между игроками старой возможно и новое положение, то не установить положение. Вы можете использовать lerp для этого или любого другого метода.

В этом видеоуроке рассказывается о всех деталях фотонной сети, в том числе о том, как бороться с заиканием и другими проблемами, с которыми вы могли столкнуться. Video Tutorial Play List

Exact Video That Addresses Stuttering

Это будет выглядеть примерно так:

currentPosition = Vector3.Lerp(currentPosition, realPosition,0.1f); 

Где currentPosition позиция сетевого проигрывателя, прежде чем он движется на вашем клиенте и realPosition это новая позиция, полученная от сети, где вы хотите, чтобы игрок был.

+0

Так что я заменю stream.SendNext (rb2D.position); и Vector2 playerMovement = rb2D.position + velocity * Time.deltaTime; rb2D.MovePosition (playerMovement); с ерпом? Спасибо – Letsgo66

+0

Для всех игроков, которые не являются главным персонажем, когда появляется новая позиция игроков, вместо того, чтобы устанавливать положение и вращение объектов, используйте lerp для перехода между старым состоянием и новым состоянием. Я не уверен, как вы можете это сделать, основываясь на вашей конкретной реализации. Например, переменная «correctPlayerPos» никогда не используется в вашем примере. http://forum.unity3d.com/threads/how-to-deal-with-a-stutter-movement.145515/ проверить последнее сообщение на странице. –

Смежные вопросы