PUN☀️一、基础配置、搭建大厅程序
文章目錄
- 🟥 前言
- 🟧 Appid配置
- 🟨 連接地區設置
- 1?? 獲得中國區Appid
- 2?? 程序設置
- 🟩 搭建大廳
- 1?? 場景及連接腳本
- 2?? 查看初步結果
- 3?? 利用加入服務器成功的回調,實現加入服務器房間
- 🚩 方法1:IConnectionCallbacks
- 🚩方法2:MonoBehaviourPunCallbacks(推薦)
- 4?? 設置房間連接人數
🟥 前言
PUN作用: 搭建多人 在線 / 局域網 網絡游戲
使用的版本: Unity2017.4.7+、PUN 2 - FREE
Appid配置網址: PUN
中國區官網: 中國區官網
教程參考地址: 地址
20190826補:
Photon邏輯順序:
連接到服務器——加入某房間——主客戶端加載場景。類似LOL自定義模式
注:PUN會根據統一的版本號、Appid,加入主客戶端的房間,使所有客戶端加載同一個場景
🟧 Appid配置
作用:PUN會根據Appid和版本號,確認你們屬于同一個應用。
配置網址:傳送門
導入SDK后出現提示框:
🚩如果你以前在PUN網頁上配置過:
你可以直接輸入你申請的Appid,點Setup Project;或Skip跳過,選擇Project里的PhotonServerSettings,將配置好的Appid填入該位置。
🚩若你是第一次使用:
則填入你的郵箱,點Setup Project,會出現注冊、進入他們網站之類的。
完成注冊后,創建Pthton PUN的應用,根據a做即可。
查看Photon全部日志信息
日志信息改為Full,可查看Photon全部日志信息。
🟨 連接地區設置
PUN默認連接海外云服務器。想用中國區服務器,就要進行如下配置:
1?? 獲得中國區Appid
🚩進入中國區官網:中國區官網
🚩點擊試用購買——申請免費中國區光子云——把創建好的Appid復制進去,提交
注意:該Appid未填入申請中國區時,仍是海外區Appid。當申請后就變成中國區的了。所以Appid可多創建幾個,一個用于中國區,一個海外。
2?? 程序設置
使用中國區Appid需要進行以下程序設置:
🚩LoadBalancingClient 腳本:
public string NameServerHost = “ns.exitgames.com”;
改為:
public string NameServerHost = “ns.photonengine.cn”;
🚩Unity 的 PhotonServerSettings——Fixed Region填入 CN
20210320測試:
現在不許輸入 CN ,輸入反而連接不上
**注意:**若用海外的服務器,則LoadBalancingClient腳本不用改,不用填CN,Appid用海外的即可。
🟩 搭建大廳
實現連接到服務器。
1?? 場景及連接腳本
1、創建新場景
2、新建空物體,將如下代碼掛上去
using UnityEngine; using Photon.Pun;public class Launcher : MonoBehaviour {//此客戶端的版本號。用戶之間通過gameVersion(允許你做出破壞性的改變)進行隔離。string gameVersion = "1";void Awake(){// 這確保我們可以在主客戶端和同一房間的所有客戶端上使用photonnet . loadlevel()自動同步它們的級別PhotonNetwork.AutomaticallySyncScene = true;}void Start(){ConnectServer();}//連接到服務器public void ConnectServer(){// 檢查是否連接了服務器if (!PhotonNetwork.IsConnected){//首先連接到光子在線服務器。PhotonNetwork.GameVersion = gameVersion;PhotonNetwork.ConnectUsingSettings();}} }2?? 查看初步結果
1、因為我們現在剛申請了中國區服務器,客服會在1-2工作日完成配置,現在還沒配置好,所以我們現在如果使用中國區服務器Unity會報錯。
所以我們暫且使用海外服務器,不用填CN,LoadBalancingClient腳本不用改,Appid用海外的即可。
2、運行,即可看到成功輸出信息了
3?? 利用加入服務器成功的回調,實現加入服務器房間
PUN連接順序:
連接服務器–加入房間
此時的代碼,只實現了加入服務器,沒寫加入到服務器房間的邏輯。
我們也不能將加入房間的代碼直接放在進行連接之后,因為連接服務器也需要時間,直接加入房間不可能成功。
所以我們要用回調加入房間。以下提供的兩種方法,建議方法2。
🚩 方法1:IConnectionCallbacks
a、 繼承IConnectionCallbacks并實現接口(里面有連接回調接口)
b、 OnConnected連接回調接口改為:
public void OnConnected(){PhotonNetwork.JoinRandomRoom();}🚩方法2:MonoBehaviourPunCallbacks(推薦)
改為繼承MonoBehaviourPunCallbacks。可增加如下回調:
#region Pun Callbacks// 連接服務器成功回調public override void OnConnectedToMaster(){PhotonNetwork.JoinRandomRoom();}//連接服務器回調public override void OnDisconnected(DisconnectCause cause){Debug.LogWarningFormat("OnDisconnected() was called by PUN with reason {0}", cause);}// 加入房間成功回調public override void OnJoinedRoom(){Debug.Log("OnJoinedRoom");}//加入房間失敗回調public override void OnJoinRandomFailed(short returnCode, string message){Debug.Log("we failed to join a random room, maybe none exists or they are all full. No worries, we create a new room.");PhotonNetwork.CreateRoom(null, new RoomOptions());}#endregion現在我們測試,發現已經加入房間成功了
4?? 設置房間連接人數
設置一個房間的連接人數
[Tooltip("最大連接人數")]public byte maxPlayersPerRoom = 4;//加入房間失敗回調public override void OnJoinRandomFailed(short returnCode, string message){Debug.Log("we failed to join a random room, maybe none exists or they are all full. No worries, we create a new room.");PhotonNetwork.CreateRoom(null, new RoomOptions { MaxPlayers=maxPlayersPerRoom});}最終代碼
using UnityEngine; using Photon.Pun; using Photon.Realtime;public class Launcher : MonoBehaviourPunCallbacks {#region Parameters//此客戶端的版本號。用戶之間通過gameVersion(允許你做出破壞性的改變)進行隔離。string gameVersion = "1";[SerializeField][Tooltip("最大連接人數")]byte maxPlayersPerRoom = 4;bool isPressPlay = false;#endregion#region Mono CallBacksvoid Awake(){// 這確保我們可以在主客戶端和同一房間的所有客戶端上使用photonnet . loadlevel()自動同步它們的級別PhotonNetwork.AutomaticallySyncScene = true;}void Start(){ConnectServer();}#endregion#region Public Method//綁定到開始連接上:連接到服務器房間public void Skode_JoinRoom(){isPressPlay = true;//若還未連接服務器,則先連接服務器,再加入房間if (!PhotonNetwork.IsConnected)ConnectServer();elseLoadRoom();}#endregion#region Private Methods//連接到服務器void ConnectServer(){// 檢查是否連接了服務器if (!PhotonNetwork.IsConnected){//首先連接到光子在線服務器。PhotonNetwork.GameVersion = gameVersion;PhotonNetwork.ConnectUsingSettings();}}void LoadRoom(){PhotonNetwork.JoinRandomRoom();}void LoadScene(){PhotonNetwork.LoadLevel("Room for " + PhotonNetwork.CurrentRoom.PlayerCount);}#endregion#region Pun Callbacks// 連接服務器成功回調public override void OnConnectedToMaster(){if (isPressPlay)LoadRoom();}//連接服務器失敗回調public override void OnDisconnected(DisconnectCause cause){Debug.LogWarningFormat("OnDisconnected() was called by PUN with reason {0}", cause);}// 加入房間成功回調public override void OnJoinedRoom(){//主客戶端加載場景即可。其他客戶端進入房間后,會自動加載主客戶端的場景if (PhotonNetwork.IsMasterClient)LoadScene();}//加入房間失敗回調public override void OnJoinRandomFailed(short returnCode, string message){Debug.Log("we failed to join a random room, maybe none exists or they are all full. No worries, we create a new room.");//創建房間后,會自動加入房間。從而觸發加入房間成功的回調。PhotonNetwork.CreateRoom(null, new RoomOptions { MaxPlayers = maxPlayersPerRoom });}#endregion }
大家還有什么問題,歡迎在下方留言!
如果你有 技術的問題 或 項目開發
都可以加下方聯系方式
和我聊一聊你的故事🧡
總結
以上是生活随笔為你收集整理的PUN☀️一、基础配置、搭建大厅程序的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: C++ —— C++类
- 下一篇: 超好用json转excel工具