Photon网络游戏开发——PUN2简介
????????Photon Unity Networking (PUN) 是為多人對(duì)戰(zhàn)游戲而生的一個(gè)Unity package。靈活的配對(duì)讓您的玩家進(jìn)入可以通過(guò)網(wǎng)絡(luò)實(shí)現(xiàn)同步對(duì)象的房間。 RPCs,自定義屬性和“低級(jí)”Photon事件是其中的一些功能特性。快速和(可選的)可靠的通信是通過(guò)Photon專用服務(wù)器完成的,所以客戶端不必一對(duì)一連接。
????????PUN 基本上可以支持Unity 的所有平臺(tái),并且有兩種選擇:
????????PUN2 FREE :包含各種演示、預(yù)制腳本和參考文檔的免費(fèi)軟件包。基本支持所有的平臺(tái)。
????????PUN2 PLUS:不僅PUN2 FREE包含的內(nèi)容,附加Photon Cloud 的 100 個(gè)并發(fā)用戶計(jì)劃(約 40k MAU,有效期 12 個(gè)月)。
1、PUN2的結(jié)構(gòu)
????????你通常不必了解PUN包的結(jié)構(gòu),對(duì)于了解它的結(jié)構(gòu)還是有必要提及,PUN封裝了三層API:
????????(1)最上層是 PUN 代碼,它實(shí)現(xiàn)了 Unity 特定的功能,如網(wǎng)絡(luò)對(duì)象、RPC 等。
????????(2)第二層包含與 Photon 服務(wù)器一起工作、匹配、回調(diào)等的邏輯。這是實(shí)時(shí) API,可以單獨(dú)使用。您會(huì)注意到 PUN 和 Realtime API(也稱為 LoadBalancing API)之間的主題有很多重疊,但這很好。
????????(3)最底層由 DLL 文件組成,其中包含反序列化、協(xié)議等。
2、開始使用
????????為了充分利用 PUN,您需要進(jìn)行一些編程。此頁(yè)面顯示了幾個(gè)重要的代碼片段作為概述。
??????? 完成學(xué)習(xí) "PUN Basics Tutorial"之后,我們就可以開始使用了。
3、連接和回調(diào)
????????ConnectUsingSettings可以立刻上網(wǎng),它獲取PhotonServerSettings上所有重要的設(shè)置,你就可以放手去做了。
PhotonNetwork.ConnectUsingSettings();????????PUN 使用回調(diào)讓您知道客戶端何時(shí)建立連接、加入房間等。
????????比如:IConnectionCallbacks.OnConnectedToMaster
????????為了方便使用,PUN擁有MonoBehaviourPunCallbacks,它繼承自MonoBehaviour。它實(shí)現(xiàn)了重要的回調(diào)接口并自動(dòng)注冊(cè),因此您可以繼承它并覆蓋特定的回調(diào)方法。
public class YourClass : MonoBehaviourPunCallbacks {// ...public override void OnConnectedToMaster(){Debug.Log("OnConnectedToMaster() was called by PUN.");PhotonNetwork.JoinRandomRoom();}// ... }????????或者在任何類中實(shí)現(xiàn) IConnectionCallbacks,并通過(guò) PhotonNetwork.AddCallbackTarget 為回調(diào)注冊(cè)實(shí)例。
4、配對(duì)系統(tǒng)
????????在OnConnectedToMaster的內(nèi)部,您可以嘗試加入現(xiàn)有房間或創(chuàng)建自己的房間。以下代碼片段顯示了開始或加入游戲的可能方法調(diào)用。
// Join room "someRoom" PhotonNetwork.JoinRoom("someRoom"); //Fails if "someRoom" is not existing, closed or full. Error callback: IMatchmakingCallbacks.OnJoinRoomFailed// Tries to join any random game: PhotonNetwork.JoinRandomRoom(); //Fails if there are no open games. Error callback: IMatchmakingCallbacks.OnJoinRandomFailed// Create this room. PhotonNetwork.CreateRoom("MyMatch"); // Fails if "MyMatch" room already exists and calls: IMatchmakingCallbacks.OnCreateRoomFailed????????當(dāng)朋友們想一起玩并且想通過(guò) PUN 之外的方式進(jìn)行交流(例如使用 Photon Chat、Facebook)時(shí),他們可以起一個(gè)房間名然后使用 JoinOrCreateRoom.。其他人就無(wú)法看到這個(gè)房間進(jìn)行匹配。
RoomOptions roomOptions = new RoomOptions(); roomOptions.IsVisible = false; roomOptions.MaxPlayers = 4; PhotonNetwork.JoinOrCreateRoom(nameEveryFriendKnows, roomOptions, TypedLobby.Default);??????? 使用JoinOrCreateRoom可以讓房間按需構(gòu)造,也不必關(guān)心誰(shuí)先進(jìn)到房間,如果房間人數(shù)滿了,則調(diào)用IMatchmakingCallbacks.OnJoinRoomFailed(如果您在某處實(shí)現(xiàn)并注冊(cè)它)。
????????在我們的指南中閱讀有關(guān)配對(duì)的更多信息。
5、游戲邏輯
????????游戲?qū)ο罂梢酝ㄟ^(guò)PhotonView組件實(shí)例化為“網(wǎng)絡(luò)游戲?qū)ο蟆?。它標(biāo)識(shí)對(duì)象和所有者(或控制器),控制的玩家會(huì)更新其他所有人。
??????? 通常,您會(huì)將 PhotonView 添加到預(yù)制件中,為其選擇 Observed 組件并使用 PhotonNetwork.Instantiate 創(chuàng)建實(shí)例。
????????PhotonView 的被觀察組件負(fù)責(zé)每秒多次寫入(和讀取)網(wǎng)絡(luò)對(duì)象的狀態(tài)。為此,腳本必須實(shí)現(xiàn) IPunObservable,它定義了 OnPhotonSerializeView。它看起來(lái)像這樣:
// used as Observed component in a PhotonView, this only reads/writes the position 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} }??????? 客戶端可以調(diào)用 Remote Procedure Calls 在不經(jīng)常發(fā)生改變的特定網(wǎng)絡(luò)對(duì)象上。
// defining a method that can be called by other clients: [PunRPC] public void OnAwakeRPC(byte myParameter) {//Debug.Log(string.Format("RPC: 'OnAwakeRPC' Parameter: {0} PhotonView: {1}", myParameter, this.photonView)); } // calling the RPC somewhere else photonView.RPC("OnAwakeRPC", RpcTarget.All, (byte)1);??????? 單獨(dú)的 GameObjects,您還可以發(fā)送自己的事件:
PhotonNetwork.RaiseEvent(eventCode, eventContent, raiseEventOptions, SendOptions.SendReliable);????????Read more about PUN's RPCs and RaiseEvent.
6、演示和教程
??????? 在PUN包中,你能找到一些演示和有用的腳本,他們可以被重復(fù)利用、拆解之后重構(gòu)。
????????To get properly started, take your time to read and code the "PUN Basics Tutorial".
總結(jié)
以上是生活随笔為你收集整理的Photon网络游戏开发——PUN2简介的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 八、T100库存管理系统之月结管理
- 下一篇: 鲁大师2021年度PC硬件报告:AMD跑