由于某种原因,其他玩家的运动是“口吃”。我知道这是人们与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 :(得分:1)
在老玩家和新玩家之间平稳过渡,不要设置位置。您可以将lerp用于此方法或任何其他方法。
本视频教程介绍了光子网络的所有细节,包括如何处理口吃以及您可能遇到的其他问题。 Video Tutorial Play List
Exact Video That Addresses Stuttering
它看起来像这样:
currentPosition = Vector3.Lerp(currentPosition, realPosition,0.1f);
其中currentPosition是网络播放器在您的客户端上移动之前的位置,而realPosition是从您希望播放器所在的网络接收的新位置。