如何修复多人游戏口吃
本文关键字:游戏 何修复 | 更新日期: 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是从网络接收到的新位置,你希望播放器在哪里。