使用Photon引擎進行unity網絡游戲開發(三)——網絡游戲大廳及房間
連接到Photon
ConnectUsingSettings 設置你的客戶端的游戲版本並使用一個由PUN設置向導寫入的配置文件,該配置文件保存在PhotonServerSettings里面。
PhotonNetwork.ConnectUsingSettings("1.0");
游戲大廳
進入游戲大廳:
MasterServer會管理多個游戲大廳,當客戶端連接至MasterServer后,需要選擇一個游戲大廳進入
方法一:設置PhotonServerSetting中的Auto Join Lobby選項進入默認游戲大廳
方法二:覆寫OnConnectedToMaster()方法,指定游戲大廳進入
/// <summary>
/// 進入大廳回調
/// </summary>
public override void OnJoinedLobby() {
Debug.Log("歡迎 " + PhotonNetwork.player.NickName);
UserMessageText.text = "歡迎 " + PhotonNetwork.player.NickName;
}
游戲房間
創建游戲房間
通過CreateRoom方法我們可以創建游戲房間,其中RoomOption類可以幫助我們設置房間的一些屬性,如房間中的人數,房間大廳中是否可見等
PhotonNetwork.CreateRoom(roomName.text, roomOptions, TypedLobby.Default);
public void ClickConfirmCreateRoomButton() {
RoomOptions roomOptions = new RoomOptions();
RectTransform toggleRectTransform = MaxPlayerToggle.GetComponent<RectTransform>();
int childCount = toggleRectTransform.childCount;
for (int i = 0; i < childCount; i++)
{
if (toggleRectTransform.GetChild(i).GetComponent<Toggle>().isOn)
{
roomOptions.MaxPlayers = maxPlayerNum[i];
break;
}
}
RoomInfo[] roomInfos = PhotonNetwork.GetRoomList();
bool isRoomNameReapeat = false;
foreach (RoomInfo roomInfo in roomInfos)
{
if (roomName.text == roomInfo.Name)
{
isRoomNameReapeat = true;
}
}
if (isRoomNameReapeat)
roommNameHint.text = "房間名稱重復!";
else
{
PhotonNetwork.CreateRoom(roomName.text, roomOptions, TypedLobby.Default);
CreateRoomPanel.SetActive(false);
roomLoadingPanel.SetActive(true);
}
}
加入游戲房間
隨機加入房間
PhotonNetwork.JoinRandomRoom();
加入特定的房間
PhotonNetwork.JoinRoom(roomName);
顯示和更新房間列表
通過Photon提供的OnReceivedRoomListUpdate()回調函數,我們可以處理房間內大廳更新時的邏輯,例如更新UI中顯示的房間列表。
/// <summary>
/// 覆寫回調函數,當房間更新時調用
/// 更新游戲大廳中的房間列表信息
/// </summary>
public override void OnReceivedRoomListUpdate() {
roomInfo=PhotonNetwork.GetRoomList();
...
ShowRoomMessage();
}
private void ShowRoomMessage() {
//通過roomInfo信息來顯示房間信息
...
}
常用回調函數
/// <summary>
/// 進入大廳回調
/// </summary>
public override void OnJoinedLobby() /// <summary> /// 連接失敗回調 /// </summary> /// <param name="cause"></param> public override void OnConnectionFail(DisconnectCause cause) //進入游戲房間回調函數 public override void OnJoinedRoom() //客戶端連接到masterserver時調用,加入默認游戲大廳 //等同於Photonseversetting中勾選Auto join lobby public override void OnConnectedToMaster() /// <summary> /// 當房間列表更新時調用 /// </summary> public override void OnReceivedRoomListUpdate() //當加入房間失敗時調用 public override void OnPhotonJoinRoomFailed(object[] codeAndMsg)
