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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

【Unity3D插件】PUN 2插件分享《Unity3D多人在线联机联网插件》——客户端服务器端一体

發布時間:2023/12/20 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【Unity3D插件】PUN 2插件分享《Unity3D多人在线联机联网插件》——客户端服务器端一体 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

推薦閱讀

  • CSDN主頁
  • GitHub開源地址
  • Unity3D插件分享
  • 簡書地址
  • 我的個人博客
  • QQ群:1040082875

大家好,我是佛系工程師☆恬靜的小魔龍☆,不定時更新Unity開發技巧,覺得有用記得一鍵三連哦。

一、前言

稍微關注過博主的同學應該有印象,我已經出過PUN(Photon Unity Networking)插件的教程:
【Unity3D插件】Photon Unity Networking(PUN)插件分享《多人聯機服務器》

怎么現在又來了呢?

主要是這篇文章是在2020年發表的,PUN從那時開始已經更新了很多版本。

目前,PUN開發團隊也經過了多個版本的迭代開發,現在已經更新到了PUN 2。

PUN 2對比PUN來說的話,連接更穩定,數據傳輸也更加高效。

那接下來博主就帶著大家來看一下新版PUN的使用吧。

二、Photon Unity Networking(PUN)介紹

Photon Unity Networking簡稱PUN,是一款多人游戲的Unity插件包。

靈活的配對讓你的玩家進入可以通過網絡同步對象的房間。

快速和可靠的通信是通過專用的Photon服務器完成的,因此客戶端不需要一對一的連接。

主要作用就是實現多人游戲的服務器,是一款服務器端和客戶端在一起的服務器。

不用再去搭建服務器,PUN是成熟可用的服務器框架,節省造輪子的時間。

三、快速上手

這一節,就帶領大家快速上手PUN服務器搭建。

3-1、注冊賬號

點擊進入Photon的官網https://dashboard.photonengine.com。

登錄賬號:

如果沒有注冊過賬號就點擊 Create one… 注冊賬號:

3-2、創建程序

進入到后臺控制頁面后,創建一個新的程序:


設置類型和名字:

App ID復制下來,有用:

3-3、在項目中導入PUN2

(1)創建項目
我用的Unity版本是Unity 2019.4.7f1,設置項目名稱和位置(項目名稱可以不與前面步驟創建的程序名字一致,我這里是為了方便演示):

注意:PUN2 支持Unity版本,2018.4.22或更高,往下的版本不支持。

(2)打開資源商店
在Unity編輯器面板,使用快捷鍵Ctrl+9打開商店,搜索PUN:

(3)點擊Download下載插件,下載完畢點擊Import進行導入:

3-4、設置參數

導入完成后,會彈出參數設置窗口,將前面步驟復制的App ID填入:

點擊Skip就可以了。

之后在Assets/Photon/PhotonUnityNetworking/Resources文件夾找到PhotonServerSettings文件,設置參數,將之前復制的App ID復制粘貼進入,APp version設置為1,PUN Loggin 設置Full:

3-5、編寫代碼

接下來就編寫代碼測試一下多個客戶端是否可以加入到同一個房間。

新建腳本命名為Launcher.cs,雙擊打開腳本進行編輯:

using System.Collections; using System.Collections.Generic; using UnityEngine; using Photon.Pun;public class Launcher : MonoBehaviourPunCallbacks {void Start(){//初始化用戶設置PhotonNetwork.ConnectUsingSettings();}//連接到服務器public override void OnConnectedToMaster(){base.OnConnectedToMaster();Debug.Log("服務器連接成功");//創建或者加入房間 設置最大游戲玩家數PhotonNetwork.JoinOrCreateRoom("Room1", new Photon.Realtime.RoomOptions { MaxPlayers = 20 }, default);}//加入到房間public override void OnJoinedRoom(){base.OnJoinedRoom();Debug.Log("加入到房間:" + PhotonNetwork.CurrentRoom);} }

將腳本拖到Main Camera對象上。

3-6、運行程序

選擇Build And Run運行程序:

然后運行Unity編輯器:

可以看到加入了房間,房間內有兩個對象。

當然現在什么效果都沒有,沒有關系,在接下來的案例中,我們會顯示加入后聯機的效果。

接下來就來看一下關鍵API吧。

四、關鍵API介紹

官方文檔在:https://doc.photonengine.com/zh-cn/pun/current/getting-started/pun-intro

4-1、連接和回調

使用ConnectUsingSettings可以讓你應用你資產文件夾中的PhotonServerSettings的屬性設置:

PhotonNetwork.ConnectUsingSettings();

PUN使用回調,讓客戶端只是何時建立了一個連接,何時加入了一個房間等等。

PUN使用了MonoBehaviourPunCallbacks接口實現了重要的回調接口并自動注冊自己,可以繼承它并覆蓋特定的回調方法:

//連接到服務器 public override void OnConnectedToMaster() {base.OnConnectedToMaster();Debug.Log("服務器連接成功"); }//加入到房間 public override void OnJoinedRoom() {base.OnJoinedRoom();Debug.Log("加入到房間:" + PhotonNetwork.CurrentRoom); }

4-2、加入、創建房間

在OnConnectedToMaster之后,可以選擇加入一個現有的房間或創建一個房間。

比如說:

// 加入一個名字叫做“Room”的房間 PhotonNetwork.JoinRoom("Room"); // 如果“Room”不存在、關閉或已滿,則加入失敗。 錯誤的回調:IMatchmakingCallbacks.OnJoinRoomFailed // 嘗試加入任何隨機房間 PhotonNetwork.JoinRandomRoom(); // 如果沒有公開放假,則加入失敗。 錯誤的回調:IMatchmakingCallbacks.OnJoinRandomFailed // 創建一個房間 PhotonNetwork.CreateRoom("MyMatch"); // 如果“MyMatch”房間已經存在則創建失敗,錯誤的回調:IMatchmakingCallbacks.OnCreateRoomFailed

如果說要跟朋友一起玩,則可以設置一個房間名稱并使用JoinOrCreateRoom來加入房間,其他人不應該被分配到這個房間:

RoomOptions roomOptions = new RoomOptions(); roomOptions.IsVisible = false;//不可見 roomOptions.MaxPlayers = 4;//最大游玩人數 PhotonNetwork.JoinOrCreateRoom(nameEveryFriendKnows, roomOptions, TypedLobby.Default);

JoinOrCreateRoom房間是按需創建的,所以誰創建的并不重要,如果房間滿了,則加入失敗。 錯誤的回調:IMatchmakingCallbacks.OnJoinRoomFailed

4-3、游戲邏輯

可以同步的對象需要加上PhotonView組件,它標識對象可以被同步更新給房間內其他對象。

通常這個對象是需要實例化出來的,可以通過PhotonNetwork.Instantiate創建一個實例化對象。

使用OnPhotonSerializeView函數去負責寫入或讀取聯網對象的狀態,比如:

// 找到使用PhotonView組件的對象,讀取或寫入位置信息 public void OnPhotonSerializeView(PhotonStream stream, PhotonMessageInfo info) {if (stream.IsWriting){Vector3 pos = transform.localPosition;stream.Serialize(ref pos);}else{Vector3 pos = Vector3.zero;stream.Serialize(ref pos); // pos gets filled-in. must be used somewhere} }

OK,API了解了,接下來就使用一個實例來演示一下怎么使用吧。

五、案例

5-1、場景搭建

新建場景,新建一個Plane和Cube:

注意:將Plane和Cube的位置歸零。

給Cube加上Rigidbody組件:

給Cube加上PhotonView組件,如果要同步的話,這個組件是必須的:

將Cube拖到Project視圖的Resources文件夾內做成預制體:

5-2、編寫腳本

新建腳本ClickFloor.cs,將腳本附給Plane對象:

using Photon.Pun; using System.Collections; using System.Collections.Generic; using UnityEngine;public class ClickFloor : MonoBehaviour {public GameObject m_CubePrefab;PhotonView photonView;void Start(){photonView = GetComponent<PhotonView>();}void Update(){if (Input.GetMouseButtonDown(0)){Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);RaycastHit hit;if (Physics.Raycast(ray, out hit)){PhotonNetwork.Instantiate(m_CubePrefab.name, hit.point + new Vector3(0, 3, 0), Quaternion.identity, 0);}}} }

將Cube拖入卡槽中:

然后新建腳本Launcher.cs編輯代碼:

using System.Collections; using System.Collections.Generic; using UnityEngine; using Photon.Pun;public class Launcher : MonoBehaviourPunCallbacks {private string NetworkClientState;//信息提示void Start(){NetworkClientState = "請稍等...服務器連接中...";//初始化用戶設置PhotonNetwork.ConnectUsingSettings();}//連接到服務器public override void OnConnectedToMaster(){base.OnConnectedToMaster();NetworkClientState = "服務器連接成功";Debug.Log(NetworkClientState);//創建或者加入房間 設置最大游戲玩家數PhotonNetwork.JoinOrCreateRoom("Room1", new Photon.Realtime.RoomOptions { MaxPlayers = 20 }, default);}//加入到房間public override void OnJoinedRoom(){base.OnJoinedRoom();NetworkClientState = "加入到房間:" + PhotonNetwork.CurrentRoom;Debug.Log(NetworkClientState);}void OnGUI(){//顯示連接信息GUILayout.Label(NetworkClientState, GUILayout.Width(300), GUILayout.Height(100));} }

點擊File→Build And Run運行程序:

然后打開Unity編輯器運行程序:

PUN服務器Demo錄制程序

六、后記

你的點贊就是對博主的支持,有問題記得留言:

博主主頁有聯系方式。

博主還有跟多寶藏文章等待你的發掘哦:

專欄方向簡介
Unity3D開發小游戲小游戲開發教程分享一些使用Unity3D引擎開發的小游戲,分享一些制作小游戲的教程。
Unity3D從入門到進階入門從自學Unity中獲取靈感,總結從零開始學習Unity的路線,有C#和Unity的知識。
Unity3D之UGUIUGUIUnity的UI系統UGUI全解析,從UGUI的基礎控件開始講起,然后將UGUI的原理,UGUI的使用全面教學。
Unity3D之讀取數據文件讀取使用Unity3D讀取txt文檔、json文檔、xml文檔、csv文檔、Excel文檔。
Unity3D之數據集合數據集合數組集合:數組、List、字典、堆棧、鏈表等數據集合知識分享。
Unity3D之VR/AR(虛擬仿真)開發虛擬仿真總結博主工作常見的虛擬仿真需求進行案例講解。
Unity3D之插件插件主要分享在Unity開發中用到的一些插件使用方法,插件介紹等
Unity3D之日常開發日常記錄主要是博主日常開發中用到的,用到的方法技巧,開發思路,代碼分享等
Unity3D之日常BUG日常記錄記錄在使用Unity3D編輯器開發項目過程中,遇到的BUG和坑,讓后來人可以有些參考。

總結

以上是生活随笔為你收集整理的【Unity3D插件】PUN 2插件分享《Unity3D多人在线联机联网插件》——客户端服务器端一体的全部內容,希望文章能夠幫你解決所遇到的問題。

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