日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

Photon PUN刷新大厅房间列表

發(fā)布時(shí)間:2023/12/20 编程问答 44 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Photon PUN刷新大厅房间列表 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

引言

在早些時(shí)候,我寫(xiě)過(guò)一篇《使用Photon PUN創(chuàng)建簡(jiǎn)單對(duì)戰(zhàn)游戲》的聯(lián)機(jī)教程,這篇教程只是很簡(jiǎn)單的實(shí)現(xiàn)了更新房間、創(chuàng)建房間、加入房間的功能,其中還有很多的BUG,需要進(jìn)行修復(fù)。最近因?yàn)橐玫絇hoton PUN這個(gè)插件,所以又進(jìn)行了一些探索,今天主要是針對(duì)更新房間這個(gè)操作進(jìn)行進(jìn)一步實(shí)現(xiàn),如果想看原生的官方教程,可以查看Photon官網(wǎng)。

初始準(zhǔn)備

前期的準(zhǔn)備可以參考我之前的那篇文章,今天主要是針對(duì)房間更新這個(gè)BUG進(jìn)行修復(fù)。為了有更好的聯(lián)機(jī)服務(wù),我也向Photon的中國(guó)光子云申請(qǐng)了中國(guó)區(qū)APPid,申請(qǐng)官網(wǎng)
完成申請(qǐng)之后要更改一些東西,首先回到unity中,找到LoadBalancingClient.cs這個(gè)腳本,修改這一行的內(nèi)容為

再更改固定地區(qū)為cn

在開(kāi)始實(shí)現(xiàn)之前,我們先思考一下,大廳的房間列表更新一般會(huì)有哪幾種情況,我這里羅列了三種:
1.房主建好房間,但未開(kāi)始游戲,此時(shí)別的玩家進(jìn)入大廳需要更新房間列表,玩家可以進(jìn)行準(zhǔn)備
2.房主建好房間,已開(kāi)始游戲,此時(shí)別的玩家進(jìn)入大廳需要更新房間列表,玩家可以直接進(jìn)入游戲
3.房主和玩家都退出房間,此時(shí)需要更新大廳房間列表

這三種并不代表所有情況,但是都需要一個(gè)功能,那就是隨時(shí)隨地更新房間列表,而不是當(dāng)房間信息更新時(shí)進(jìn)行更新,所以我們需要主動(dòng)去觸發(fā)房間更新,然后獲取到列表里面,這里就引入了Photon PUN里面的一些新功能。在大廳界面,我們新建一個(gè)按鈕用來(lái)主動(dòng)更新房間列表,然后為其綁定事件函數(shù)。

我們回到之前寫(xiě)的加入或創(chuàng)建房間的回調(diào)事件中,進(jìn)行一些修改,加入的時(shí)候設(shè)置了大廳類(lèi)型

/// <summary>/// 當(dāng)成功連接該服務(wù)器/// </summary>public override void OnConnectedToMaster(){NamePanel.SetActive(true);//顯示名字面板StartInitPanel.SetActive(false);//隱藏開(kāi)始初始化面板TypedLobby typedLobby = new TypedLobby("customSqlLobby", LobbyType.SqlLobby);//設(shè)置當(dāng)前大廳類(lèi)型為sqllobbyPhotonNetwork.JoinLobby(typedLobby);//加入大廳Debug.Log("加入大廳成功");}

在創(chuàng)建房間的按鈕事件里,進(jìn)行修改,添加兩個(gè)篩選的條件,可以理解為這個(gè)房間的自定義的參數(shù),主要為了,Photon官方的解釋就是類(lèi)似數(shù)據(jù)庫(kù)的篩選條件,可以更加精確地區(qū)分你的房間。這里我們隨便設(shè)置了兩個(gè)參數(shù),參數(shù)的類(lèi)型和命名由你自己定,注意命名不能以下面的方式進(jìn)行。

public const string ELO_PROP_KEY = "C0";public const string MAP_PROP_KEY = "C1";/// <summary>/// 創(chuàng)建或加入房間按鈕/// </summary>public void joinOrCreateRoomBtn(){if (RoomnameInputField.text.Length <= 2){return;}LobbyPanel.SetActive(false);RoomOptions roomOptions = new RoomOptions { MaxPlayers = 4,IsOpen=true};//房間最大人數(shù)4人roomOptions.CustomRoomProperties = new ExitGames.Client.Photon.Hashtable { { ELO_PROP_KEY, 100 }, { MAP_PROP_KEY, "Map1" } };roomOptions.CustomRoomPropertiesForLobby = new string[] { ELO_PROP_KEY,MAP_PROP_KEY};PhotonNetwork.JoinOrCreateRoom(RoomnameInputField.text, roomOptions, default);RoomPanel.SetActive(true);}

不能使用的命名參數(shù):
ALTER
CREATE
DELETE
DROP
EXEC
EXECUTE
INSERT
INSERT INTO
MERGE
SELECT
UPDATE
UNION
UNION ALL

接下來(lái)我們寫(xiě)一個(gè)獲取房間列表的函數(shù)和按鈕事件

/// <summary>/// 獲取到房間列表的函數(shù),傳入sql大廳篩選參數(shù)/// </summary>/// <param name="sqlLobbyFilter"></param>private void GetCustomRoomList(string sqlLobbyFilter){//新建一個(gè)大廳類(lèi)型,TypedLobby typedLobby = new TypedLobby("customSqlLobby", LobbyType.SqlLobby);bool isgetsuce=PhotonNetwork.GetCustomRoomList(typedLobby, sqlLobbyFilter);if (isgetsuce){Debug.Log("獲取房間列表成功");}else{Debug.Log("獲取失敗");}}public void UpdateRoomInfoBtn(){GetCustomRoomList("C1='Map1'");}

如此,就可以進(jìn)行主動(dòng)刷新了。
但是,剛才講到房主未開(kāi)始游戲時(shí),玩家進(jìn)去之后會(huì)有一個(gè)準(zhǔn)備按鈕,但是如果房主已經(jīng)開(kāi)始游戲,此時(shí)就要切換成進(jìn)入游戲按鈕,所以這里需要進(jìn)行一些修改,會(huì)用到一個(gè)非常實(shí)用的功能,就是photon里面的哈希值設(shè)置,具體用法如下:

//設(shè)置參數(shù) 我這里設(shè)置的是游戲是否已經(jīng)開(kāi)始的一個(gè)參數(shù)ExitGames.Client.Photon.Hashtable MGameState = new ExitGames.Client.Photon.Hashtable();MGameState["gamestate"] = 1;//1代表游戲進(jìn)行中 0代表游戲未開(kāi)始PhotonNetwork.CurrentRoom.SetCustomProperties(MGameState); //獲取參數(shù) if (PhotonNetwork.CurrentRoom.CustomProperties.ContainsKey("gamestate")){if ((int)(PhotonNetwork.CurrentRoom.CustomProperties["gamestate"]) == 1){readyBtn.SetActive(false);startBtn.SetActive(false);enterGameBtn.SetActive(true);}else{readyBtn.SetActive(true);startBtn.SetActive(false);enterGameBtn.SetActive(false);}print(PhotonNetwork.CurrentRoom.CustomProperties["gamestate"]); }

其實(shí)只要可以同時(shí)設(shè)置這個(gè),就可以分發(fā)到其他玩家那里,對(duì)應(yīng)的步驟也就簡(jiǎn)單了,不過(guò)我這里建議滿四個(gè)人或者固定人數(shù)開(kāi)始游戲比較好,如果沒(méi)有達(dá)到相應(yīng)的人數(shù),就不能開(kāi)始游戲。當(dāng)然也可以嘗試一下不滿人就加入,這里我技術(shù)水平有限,還遇到一些問(wèn)題,需要后面再解決,有想法的大佬可以交流一下啊。需要項(xiàng)目源碼可以私聊我,我們一起交流一下。

總結(jié)

以上是生活随笔為你收集整理的Photon PUN刷新大厅房间列表的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。