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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

PUN☀️一、基础配置、搭建大厅程序

發布時間:2023/12/20 编程问答 50 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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☀️一、基础配置、搭建大厅程序的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。