如何使用光子网络仅同步一次位置

How to sync position only one time, using Photon Networking

我要执行以下操作。
当玩家加入房间时,他应该收到所有游戏对象(带有光子视图)的位置。
当玩家进入房间时,这应该只发生一次。 如何实施?

只发送一条信息的最佳解决方案是使用RPC消息系统。

[PunRPC]
void changePos(int x, int y, int z)
{
    Debug.Log("new pos =" + x + "," + y + ","+z);
}

PhotonView photonView = PhotonView.Get(this);
photonView.RPC("changePos", PhotonTargets.All, 1,1,1 );

您可以在此处阅读有关 RPC 消息的更多信息:https://doc.photonengine.com/en/pun/current/tutorials/rpcsandraiseevent

编辑:

我猜你是通过以下方式连接的:

        PhotonNetwork.JoinRoom(this.roomName);

所以在负责连接服务器的地方你可以使用:

public void OnCreatedRoom()
{
    Debug.Log("OnCreatedRoom");
}

public void OnJoinedRoom()
{
    Debug.Log("OnJoinedRoom");
    RPCserver.Instance.AddNewPlayer(login)      
}

然后,你可以有一个桥来存储所有启用 RPC 的方法:

public class RPCserver : Singleton
{
    public List<Player> players = new List<Player>();

    public void addNewPlayer(string name)
    {
            Player p = new Player(name);
            players.Add(p);

            if( p.isNewPlayer() ) fetchOtherObjectsPositions();
    }

    private void fetchOtherObjectsPositions(){
        // Go through all neccesery objects, and send their position via RPCserver
    }
}

有道理吗?