如何修复多人游戏口吃?

时间:2015-10-23 04:43:49

标签: c# unity3d photon

由于某种原因,其他玩家的运动是“口吃”。我知道这是人们与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);
    }
}

1 个答案:

答案 0 :(得分:1)

在老玩家和新玩家之间平稳过渡,不要设置位置。您可以将lerp用于此方法或任何其他方法。

本视频教程介绍了光子网络的所有细节,包括如何处理口吃以及您可能遇到的其他问题。 Video Tutorial Play List

Exact Video That Addresses Stuttering

它看起来像这样:

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

其中currentPosition是网络播放器在您的客户端上移动之前的位置,而realPosition是从您希望播放器所在的网络接收的新位置。