Photon Unity3d:OnPhotonSerializeView()不起作用

时间:2017-05-11 11:16:15

标签: unity3d multiplayer photon

我正在玩多人游戏的汽车游戏。 一切正常,主人和客户都很好地连接到房间。 (我一直在使用马可波罗教程) 问题是当我看到其他车辆在屏幕上移动时,通过传送汽车来更新位置。一直出现和消失。

我的部分代码:

PhotonNetwork.automaticallySyncScene = false;

public class CNPlayerManager : Photon.MonoBehaviour
{
...
 void FixedUpdate()
    {
        if (photonView.isMine)
        {
            //it works fine
        }
        else
        {
            transform.position= Vector3.Lerp(transform.position, this.correctPosition, Time.deltaTime * 5);
            transform.rotation= Quaternion.Lerp(transform.rotation, this.correctRotation, Time.deltaTime * 5);
        }
    }

public void OnPhotonSerializeView(PhotonStream stream, PhotonMessageInfo info)
{
    if (stream.isWriting)
    {
            stream.SendNext(transform.position);
            stream.SendNext(transform.rotation);

    }
    else
    {
            this.correctPosition = (Vector3)stream.ReceiveNext();               //Line 100
            this.correctRotation = (Quaternion)stream.ReceiveNext();       //Line 101

    }
}

我的汽车预制件中的PhotonView是这样的:但在我的Photon版本中我有更多选择。在所有者中我有“设置在运行时”和“固定”。在“观察到的组件”中,我有2个组件,我的汽车预制件和脚本CNPlayerManager。

当我玩2辆车时,在第一辆车中我有时会收到此错误:“IndexOutOfRangeException:数组索引超出范围.PhotonStream.ReceiveNext()...”在第100行。 在第二辆车中,我得到了同样的结果。

你能帮我吗?

1 个答案:

答案 0 :(得分:0)

当你说你观察汽车预制件时,你是什么意思"?我认为仅仅观察CNPlayerManager脚本就足够了,因为它处理位置和旋转同步。

但是我建议你看看PUN包中已经包含的脚本,特别是PhotonTransformView脚本。这个可以实现您想要实现的目标,并提供一些同步选项,您可以检查哪个,并查看哪个最适合您的需求。

如果您仍然遇到问题,请告诉我们。