如何修复多人游戏口吃

本文关键字:游戏 何修复 | 更新日期: 2023-09-27 18:19:03

由于某些原因,其他球员的移动是"口吃"。我知道这是一个常见的问题,人们跑进光子,所以想知道如果有人知道我怎么能解决它?

这是我的玩家移动代码:

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

如何修复多人游戏口吃

在球员新旧位置之间进行平滑过渡,不要设置位置。你可以用lerp来做这个或任何其他的方法。

这个视频教程进入光子网络的所有细节,包括如何处理口吃和其他问题,你可能会遇到。视频教程播放列表

解决口吃的精确视频

它看起来像这样:

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

Where currentPosition是网络播放器在你的客户端上移动之前的位置,realPosition是从网络接收到的新位置,你希望播放器在哪里。