tips:根据当前在房间里玩的玩家数量处理各种关卡加载的功能
一、加载竞技场常规
1.打开‘GameManager’脚本
2.加入新的regin,并加入新的函数
#region Private MEthods
void LoadArena()
{
if(!PhotonNetwork.IsMasterClient)
{
Debug.LogError("photonnetwork:trying to load a level but we are not the master Client!");
}
Debug.LogFormat("photonnetwork: loading level:{0}", PhotonNetwork.CurrentRoom.PlayerCount);
PhotonNetwork.LoadLevel("Room for" + PhotonNetwork.CurrentRoom.PlayerCount);
}
#endregion
3.保存脚本
解释:当我们调用此方法的时候,将根据我们所在房间的PlayerCount属性加载适当的房间
①LoadLevel方法只能是MasterClient调用
②PhotonNetwork.LoadLevel("Room for" + PhotonNetwork.CurrentRoom.PlayerCount);我们使用Photon加载想要的房间场景而不是unity,是因为我们想依靠它在房间里所有连接的客户端上加载此关卡,因为我们已经为本游戏启动了PhotonNetwork。AutomaticallySyncScene
二、监听玩家连接
GameManager脚本需要监听玩家的连接和断开
1.打开该脚本
2.添加如下内容
public override void OnPlayerEnteredRoom(Player newPlayer)
{
Debug.LogFormat("OnPlayerEnteredRoom(){0}", newPlayer.NickName);//新加入房间的人名
if(PhotonNetwork.IsMasterClient)
{
Debug.LogFormat("OnPlayerEnteredRoom IsMasterClient {0}", PhotonNetwork.IsMasterClient);
LoadArena();
}
}
public override void OnPlayerLeftRoom(Player otherPlayer)
{
Debug.LogFormat("OnPlayerLeftRoom(){0}", otherPlayer.NickName);
if (PhotonNetwork.IsMasterClient)
{
Debug.LogFormat("OnPlayerLeftRoom IsMasterClient {0}", PhotonNetwork.IsMasterClient);
LoadArena();
}
}
3.保存脚本
解释:现在,每次一个玩家加入或者离开房间,我们都可以看到信息,并且只有放我们是MAsterClient的时候调用LoadArena方法
三、在初始界面加载竞技场
1.进入Launcher脚本
2.加入下面的脚本内容
public override void OnJoinedRoom()
{
Debug.Log("now this client is in a room");
Debug.Log(PhotonNetwork.NickName);
if(PhotonNetwork.CurrentRoom.PlayerCount==1)
{
Debug.Log("We Load the Room for 1");
//Load room level
PhotonNetwork.LoadLevel("Room for 1");
}
}
现在可以在初始界面试一下,点击Play之后,就可以跳转到Room for 1
在Room for 1中点击Leave 又可以回到初始场景,但是我们会发现,回去之后,立马又回来了,下面让我们解决这个bug
出现这个问题是因为,该方法被自动调用,于是直接进入join RandomRoom(),就又回到了Room for 1
所以,解决这个问题我们需要让脚本在用户点击了“Play”按钮之后,再调用该函数,所以可以设置一个变量作为标志
1.打开Launcher脚本
2.创建一个新的标志变量,并修改Connect函数
public void Connect()
{
if(PhotonNetwork.IsConnected)
{
PhotonNetwork.JoinRandomRoom();
}
else
{
//keep track of the will to join a room,because when we come back from the game we will get a callback that we are connected,so we need to know what to do then
isConnecting = PhotonNetwork.ConnectUsingSettings();
}
progressLabel.SetActive(true);
controlPanel.SetActive(false);
}
3.将该bool变量在OnConnectedToMaster和OnDisConnected中设置为False
至此,可以发布桌面版本和unity一起运行,这样可以获得两名玩家接入同一个房间,如果是unity首先创建房间,可以在控制台看到,首先是进入room for 1,然后进入Room for 2