我想做以下事
当玩家加入房间时,他应该收到所有游戏对象' (带光子视图)位置。
当玩家进入房间时,这应该只发生一次。
怎么可以实现呢?
答案 0 :(得分:1)
仅发送一条信息的最佳解决方案是使用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
}
}
这有意义吗?