Photon PUN刷新大厅房间列表
引言
在早些時候,我寫過一篇《使用Photon PUN創(chuàng)建簡單對戰(zhàn)游戲》的聯(lián)機(jī)教程,這篇教程只是很簡單的實現(xiàn)了更新房間、創(chuàng)建房間、加入房間的功能,其中還有很多的BUG,需要進(jìn)行修復(fù)。最近因為要用到Photon PUN這個插件,所以又進(jìn)行了一些探索,今天主要是針對更新房間這個操作進(jìn)行進(jìn)一步實現(xiàn),如果想看原生的官方教程,可以查看Photon官網(wǎng)。
初始準(zhǔn)備
前期的準(zhǔn)備可以參考我之前的那篇文章,今天主要是針對房間更新這個BUG進(jìn)行修復(fù)。為了有更好的聯(lián)機(jī)服務(wù),我也向Photon的中國光子云申請了中國區(qū)APPid,申請官網(wǎng)
完成申請之后要更改一些東西,首先回到unity中,找到LoadBalancingClient.cs這個腳本,修改這一行的內(nèi)容為
再更改固定地區(qū)為cn
在開始實現(xiàn)之前,我們先思考一下,大廳的房間列表更新一般會有哪幾種情況,我這里羅列了三種:
1.房主建好房間,但未開始游戲,此時別的玩家進(jìn)入大廳需要更新房間列表,玩家可以進(jìn)行準(zhǔn)備
2.房主建好房間,已開始游戲,此時別的玩家進(jìn)入大廳需要更新房間列表,玩家可以直接進(jìn)入游戲
3.房主和玩家都退出房間,此時需要更新大廳房間列表
這三種并不代表所有情況,但是都需要一個功能,那就是隨時隨地更新房間列表,而不是當(dāng)房間信息更新時進(jìn)行更新,所以我們需要主動去觸發(fā)房間更新,然后獲取到列表里面,這里就引入了Photon PUN里面的一些新功能。在大廳界面,我們新建一個按鈕用來主動更新房間列表,然后為其綁定事件函數(shù)。
我們回到之前寫的加入或創(chuàng)建房間的回調(diào)事件中,進(jìn)行一些修改,加入的時候設(shè)置了大廳類型
在創(chuàng)建房間的按鈕事件里,進(jìn)行修改,添加兩個篩選的條件,可以理解為這個房間的自定義的參數(shù),主要為了,Photon官方的解釋就是類似數(shù)據(jù)庫的篩選條件,可以更加精確地區(qū)分你的房間。這里我們隨便設(shè)置了兩個參數(shù),參數(shù)的類型和命名由你自己定,注意命名不能以下面的方式進(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
接下來我們寫一個獲取房間列表的函數(shù)和按鈕事件
/// <summary>/// 獲取到房間列表的函數(shù),傳入sql大廳篩選參數(shù)/// </summary>/// <param name="sqlLobbyFilter"></param>private void GetCustomRoomList(string sqlLobbyFilter){//新建一個大廳類型,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)行主動刷新了。
但是,剛才講到房主未開始游戲時,玩家進(jìn)去之后會有一個準(zhǔn)備按鈕,但是如果房主已經(jīng)開始游戲,此時就要切換成進(jìn)入游戲按鈕,所以這里需要進(jìn)行一些修改,會用到一個非常實用的功能,就是photon里面的哈希值設(shè)置,具體用法如下:
其實只要可以同時設(shè)置這個,就可以分發(fā)到其他玩家那里,對應(yīng)的步驟也就簡單了,不過我這里建議滿四個人或者固定人數(shù)開始游戲比較好,如果沒有達(dá)到相應(yīng)的人數(shù),就不能開始游戲。當(dāng)然也可以嘗試一下不滿人就加入,這里我技術(shù)水平有限,還遇到一些問題,需要后面再解決,有想法的大佬可以交流一下啊。需要項目源碼可以私聊我,我們一起交流一下。
總結(jié)
以上是生活随笔為你收集整理的Photon PUN刷新大厅房间列表的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: myeclipse运行java项目_my
- 下一篇: 2019.11.27 阵列信号处理