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