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

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

Photon网络游戏开发——PUN2简介

發(fā)布時(shí)間:2023/12/18 编程问答 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Photon网络游戏开发——PUN2简介 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

????????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、開(kāi)始使用

????????為了充分利用 PUN,您需要進(jìn)行一些編程。此頁(yè)面顯示了幾個(gè)重要的代碼片段作為概述。

??????? 完成學(xué)習(xí) "PUN Basics Tutorial"之后,我們就可以開(kāi)始使用了。

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)建自己的房間。以下代碼片段顯示了開(kāi)始或加入游戲的可能方法調(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)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。