如何在Unity中創建跨平台多人聯網遊戲?(一)
譯者:王磊(未來的未來)審校:崔嘉藝(milan21)
什麼?你想開發一個多人聯網遊戲?你瘋了嗎!? 開發一個多人聯網遊戲很難! 我認真地說,在遊戲開發方面,很少有東西能比多人聯網遊戲更讓開發人員容易發瘋:測試很困難,難以調試,會有一些幾乎不可能重現的bug,當然,這會一直持續到你向大眾演示你的遊戲版本
- 即使你的所有代碼都能正常工作,可是遊戲仍然可以因為網路情況太差而出現問題。
儘管開發多人聯網遊戲會面臨這麼大的挑戰,但是這是完全值得的。無論多麼聰明的AI,都不可能擁有像人類的對手一樣的聰明才智,你與AI的交談也不會像與你的朋友的交談一樣有趣。 而且我還沒有聽說任何玩家會與網上的AI開始交往。。。雖然傑昆·菲尼克斯主演的電影中有發生這種情況:]
在這個教程中,你將創建一個可以在不同的設備上運行的聯網多人聯網遊戲。當你炫耀iOS和Android的設備可以一起玩你的遊戲的時候,你的同事會認為這非常的酷!
但是盡量不要讓這種想法佔據你的思想。
在這個系列教程的第一部分中,你將學習以下內容:
如何配置和安裝Google Play的遊戲服務。
如何設置iOS項目以使用Google Play遊戲服務。
如何登錄用戶。
如何登出用戶。
在你繼續閱讀本教程之前,你應該具備以下先決條件:
對Unity和C#的基本了解。 所有的編碼都將通過C#進行–這裡沒有Objective-C、Swift或是Java代碼!
有一些在實際設備上運行Unity遊戲的經驗。
有至少兩個可以進行遊戲開發的設備:iOS,Android或是每種一台。 只用一個設備來測試多人聯網遊戲往往是相當困難的。 :]
Google Play開發者帳戶,你可以通過https://play.google.com/apps/publish/進行註冊。 即使你只在iOS上測試,你仍然需要這樣一個帳戶。獲取Play開發者帳戶將使你付出25美金 - 但是,一旦你在實際中體驗到你的遊戲,你會認為這筆投資是值得的!
需要注意的是:對於那些考慮使用模擬器來嘗試本教程的人,你會發現使用模擬器會讓你很狂躁。模擬器這種方法不行。你將需要兩個設備。在理想情況下,你應該擁有一個iOS設備和一個Android設備,但是兩個相同的設備也可以正常工作。
如果你是剛剛開始使用Unity,那麼在學習像這樣的高階Unity教程之前,先學習本網站上ChristopherLaPollo的一本優秀教程——《Unity 2D系列教程》將對你有很大幫助。
起步
現在,是時候來熟悉一下這個你將完成的令人驚嘆的多人遊戲了。下載Circuit Racer啟動項目(Unity版本),然後解壓縮文件以提取工程。
在Unity中,選擇File Open Project。從出現的對話框中選擇Open Other… ,然後選擇你剛剛解壓好的Circuit Racer文件夾:
首先載入主菜單場景。從資源面板中,選擇MenuStuff,然後雙擊MainMenu打開主菜單。
點擊播放按鈕,嘗試在Unity中運行遊戲。選擇單人遊戲,並在時間耗盡之前盡量讓你的賽車多跑幾圈!
GIF/893K
哦,順便說一下 - 小心這些箱子。 :]
在真實的設備上運行
現在是時候在實際的設備上嘗試這個遊戲了。由於你是在RayWenderlich.com上閱讀此文檔,所以我們假設你會希望在iOS設備上運行這個遊戲。 RoyWenderlich.com上的讀者-這是Ray的邪惡雙胞胎,是一個Android教程網站-可能會有不同的想法:
Ray和Roy很罕見地出現在同一張照片中。
你首先需要將項目的Bundle標識符更改為一個不太通用的標識符。轉到File BuildSettings,然後選擇iOS。iOS平台應該已經被選為目標平台,但如果不是的話,請點擊切換平台按鈕來選擇iOS平台。
單擊播放器設置,播放器設置應該顯示在「檢視器」面板中。 在「其他設置」區域中,查找「Bundle標識符」,將其從com.example.CircuitRacerUnity更改為唯一的、適用於你的配置文件,如com.. .CircuitRacerUnity:
現在將你的物理設備連接到你的Mac電腦上。如果你以前沒有在這個設備上運行過Xcode項目,請先閱讀本教程中的前置要求再做這個事情。
回到「構建設置」對話框,這個對話框應該仍然是打開狀態,然後選擇構建和運行。Unity將要求你保存生成的Xcode項目。給它一個有趣的初始名字,比如像是CircuitRaceriOS。
一旦Unity完成了項目的導出,它將在Xcode中打開新創建的項目。 Xcode將需要一些時間來處理該文件,然後它將在你的實際設備上運行遊戲! 但是,有時Xcode會忘記為你運行項目。如果發生這種情況,只需單擊運行按鈕提醒Xcode為什麼它會被開啟。 :]
需要注意的是:如果你運行的是較舊版本的Unity和較新版本的Xcode,Unity可能會在將文件導出到iOS項目後打開Xcode。如果發生這種情況,請將你的Unity版本升級到最新版本,或者簡單地打開Xcode,手動打開項目,然後從那裡繼續運行你的項目。
除了支持屏幕上的手柄之外,遊戲還支持重力感應,可以通過傾斜手機來控制- 當你在Unity中玩遊戲的時候,你可能不會注意到這一點。
了解Circuit Racer
這個教程中的Circuit Racer遊戲是兩個不同教程的混搭:
Circuit RacerSpriteKit遊戲,在書籍《iOS遊戲開發指南》中講述過。
本網站上的Christopher LaPollo的《Unity 2D簡介教程》。
這個系列教程將不會詳細介紹控制項的工作原理、遊戲是如何知道你已經完成了一圈、或是汽車如何進行轉向,因為上述兩個教程已經涵蓋了這些內容,並且與你把遊戲變成一個多人聯網遊戲的目標沒有直接的關係。不過,請隨時瀏覽代碼,特別是GameController、CarController和AnalogControl類,這將為你提供一些有關事情的總體思路。
需要注意的是:在撰寫本文的時候,Unity 4.6仍處於測試階段,因此該項目仍在使用由Unity 4.5及更早版本支持的舊版GUI系統。
只要你在設備上嘗試這個遊戲,你也可以看看多人聯網遊戲選項所提供的內容。回到主菜單,然後點擊多人聯網遊戲按鈕:
呃,好吧,看到的內容是非常糟糕的,但好消息是,你要解決這個問題!
對Google Play遊戲服務的介紹
儘管探討各種防火牆背後設備之間的網路連接對某些人來說可能聽起來很有趣,但大多數開發人員選擇使用第三方庫來處理初始化多人聯網遊戲的許多「複雜但不好玩」的任務。第三方框架有很多選擇,本教程選擇使用Google Play遊戲服務的原因如下:
1.它是免費的。
2.Unity中有對應的插件可用。
3.這個插件也是免費的。
是的, 正在吃穀物的哥們,這是真的。遊戲中心確實為實時多人聯網遊戲提供了一些非常好的支持,但它只適用於iOS設備。 在這個時代,即使是最徹底的iOS粉絲也有一兩個使用Android想一起玩遊戲的朋友。
使用Unity來製作2D遊戲的優點之一是你可以輕鬆地將遊戲導出到Android和iOS上,如果你的多人聯網遊戲解決方案也是如此,這將是非常好的。坦白說,我為Google工作,而且我偶爾會與製作Google Play遊戲服務的人一起玩Towerfall,所以我多少會有點偏袒。
GooglePlay遊戲服務包括了遊戲開發人員需要的許多功能,包括成就、排行榜、將遊戲狀態保存在雲中,創建任務,而對於本教程最重要的是它支持基於回合制和實時多人聯網遊戲。除了實時多人聯網遊戲,你將不需要實現任何其他功能。但是,一旦你將Play服務整合到你的遊戲中,你可能需要檢查一些其他功能,以查看他們能為你提供什麼。
設置Google Play遊戲服務
好的,我在這裡要跟你說一下:這裡有一些設置需要處理一下。但是堅持下去 - 一旦你完成這個部分,你就可以繼續寫代碼了!
註冊你的遊戲
在你做任何其他事情之前,你需要通過Google Play開發者控制中心註冊你的應用程序,並獲得自己的客戶端ID。這樣就可以通過該服務識別你的應用程序,並允許你執行重要操作,比如說是用戶登陸。
在瀏覽器中打開https://play.google.com/apps/publish/。如果你沒有GooglePlay開發者帳戶,你可以在這申請一個:
如果你有帳戶並登錄,你將看到如下所示的屏幕:
。。。或是顯示你現有的應用程序:
無論採用哪種方式,都是通過點擊左側的小遊戲手柄圖標開始
接下來,像這樣點擊」設置Google Play遊戲服務」按鈕:
如果你以前設置過Play遊戲服務,請點擊屏幕頂部的「添加新遊戲」按鈕:
將出現一個對話框,其中包含兩個選項卡:第一個選項卡對應的是,你尚未在遊戲中使用任何Google API,第二個選項卡是你正在開發的遊戲中已使用的Google API的情況。你肯定是第一種情況,所以選擇第一個選項卡來離開對話框。
適當地命名你的項目。你可以用任何你喜歡的名字來稱呼它,因為這個名字不需要是唯一的。 選擇一個遊戲類別,「賽車」可能是一個很好的選擇,但嘿,這是一個自由的國度,你可以隨意選擇。完成後,你的對話框應如下所示:
點擊」繼續「,你會發現自己現在看到的是遊戲詳細信息頁面,你可以在其中添加名稱、描述和一些圖像到你的遊戲中去。這是你在實際發布遊戲之前必須處理的事情,但出於本教程的目的,你可以跳過填寫這些項目。
相反,你將設置你的客戶端ID。 點擊左側的「鏈接應用程序「選項卡,如下所示:
接下來,從給定的選項中選擇iOS,如下所示:
在出現的下一頁中,將「名稱」設置你想設置的任何內容,並將iPad和iPhone設置為「是」。接下來,在」構建設置「步驟中輸入你分配給遊戲的Bundle ID。
需要注意的是:稍後更改你的Bundle標識符可能會非常痛苦。為了給你自己帶來方便,請確保你擁有與你在Unity中輸入的相匹配的Bundle ID,並且此Bundle ID對於你和你的組織來說是唯一的。
ITunes App ID不需要填寫;你現在還不需要用到它。現在你的頁面看起來應該如下所示:
在這個頁面的下方,在「多人聯網遊戲設置」部分中有兩個單獨的選項卡,以便為你的遊戲啟用回合制和實時多人聯網遊戲。但是你想要哪一個?
回合制多人聯網遊戲 vs. 實時多人聯網遊戲:快速入門
GooglePlay遊戲服務以及許多其他遊戲框架支持回合制和實時遊戲。這是一個快速介紹,介紹一下二者的含義:
實時遊戲要求每個玩家同時在場和進行遊戲,它通常適用於那些所有玩家一起玩的遊戲,並能看到對方的動作發生。這其中的例子包括第一人稱射擊遊戲,多人在線競技場以及大多數運動遊戲。
另一方面,回合制的遊戲通常一次只有一個人在玩,而其他玩家則是不活躍的 - 甚至可能沒有在他們的手機旁邊。對於這些類型的遊戲,玩家可能需要一兩天的時間來進行下一回合。因此,這個選項對於速度更慢、更需要長考的遊戲或涉及到單個玩家需要很長時間來完成一個回合的場合最有用。與朋友說話和是繪畫有關的東西是回合制遊戲的典型例子。
流行測驗,熱點:你正在做德州撲克遊戲。這應該是回合制還是實時的? 在下面檢查你的答案。
答案:雖然撲克在技術上是一個基於回合制的遊戲,但人們期望快速連續進行回合,因此您希望這是一個實時遊戲。你能想像一個撲克遊戲,每個玩家花費48個小時來決定是否投注? 第一輪投注可能需要一個月的時間! 這太無聊了! :]
GooglePlay遊戲服務包括了遊戲開發人員需要的許多功能,包括成就、排行榜、將遊戲狀態保存在雲中,創建任務,而對於本教程最重要的是它支持基於回合制和實時多人聯網遊戲。除了實時多人聯網遊戲,你將不需要實現任何其他功能。
在你的賽車遊戲中,你將有兩名玩家在同一場比賽中相互競爭,因此將「實時多人聯網遊戲」設置設為」開「。
點擊屏幕頂部的「保存並繼續「按鈕。接下來,你會看到下面這個截圖,你被要求授權你的應用程序:
你可以在這裡創建客戶端ID,這個ID基本上是標識你的應用在Google伺服器上的標識符。點擊「授權你的應用」按鈕。
出現的第一個對話框可以添加公司的名稱、標誌和主頁。這些設置決定了你的遊戲如何顯示在提示用戶登錄你的應用程序的各種截圖中:
對於這個教程而言,只需單擊「繼續」。
下一個對話框要求你的bundle標識符和App Store ID。它已經預先填充了你在對話框的第1步中添加的相同信息,因此你不必在此處執行任何操作。 只需確認一切正確,然後單擊「創建客戶端」:
頁面處理完成以後,你將看到一個以apps.googleusercontent.com結尾的巨型字元串 - 這是你的客戶端ID:
將此字元串複製並粘貼到某個文本文件中,稍後你將需要它。
添加測試者
在你開始編碼之前還需要最後一步。單擊屏幕左側的「測試」選項卡進入「測試」面板。在「測試訪問」部分,你應該會看到你的電子郵件地址,也可能會看到你的其他團隊成員的電子郵件地址,如下所示:
當Play遊戲服務處於未發布狀態的時候,這個服務只能由此處列出的帳戶來使用。由於你將要使用其他幾個Google帳戶進行測試 - 對於你的多人聯網遊戲,你至少需要兩個賬戶 - 點擊添加測試者按鈕,然後添加要列入白名單的地址:
讚賞下自己 - 你完成了Google Play的設置! :]
安裝Unity插件
現在你需要安裝插件,從而在Unity中使用Play遊戲的服務。打開頁面https://github.com/playgameservices/play-games-plugin-for-unity,然後點擊右側的「下載ZIP」按鈕:
這個按鈕意味著你正在從雲端下載某些東西,或者外面在下很大的雨。不管怎樣,你應該留在室內。
一旦完成,請解壓縮你下載的軟體包並返回到Unity。你好,Circuit Racer! 你想念我們嗎 :]要安裝插件,請選擇Assets Import Package CustomPackage,如下所示:
瀏覽你創建的文件夾,然後導航到包含的 current-build 文件夾。選擇以unity package結尾的文件。
需要注意的是:在撰寫本文的時候,該軟體包名為GooglePlayGamesPlugin-0.9.10.unitypackage,但是當你閱讀這篇文章的時候,版本號可能已更改。
你現在應該看到一個「導入包」對話框,所有選項都應該已經被選中了,但是如果沒有選中的話,只需點擊「全部」按鈕。最後點擊「導入」:
你現在有幾個令人興奮的新文件夾和一個新的「Google Play遊戲」菜單項。 如果你沒有看到菜單項,請單擊菜單欄以強制Unity刷新其內容。 從菜單中選擇Google Play GamesiOSSetup,你將看到一個對話框,你需要提供兩條信息:
「客戶端ID」是這個教程前面你複製過的那個巨型字元串。
「Bundle ID」是你一直在使用的Bundle ID。
在對話框中輸入兩條信息,然後單擊設置。 你應該收到一個警報,一切都很好,現在你可以關閉對話框了。
哦,等等 - 你在前面的步驟裡面忘記複製客戶端ID了嗎? 沒問題; 以下是如何找到你的客戶端ID的方法:
1.返回Play的開發者控制台,網址為:https://play.google.com/apps/publish/。
2.點擊左側的遊戲服務(小控制器圖標)。
3.點擊你的遊戲。
5.點擊iOS版本的入口。
6.在底部,你應該看到你的客戶端ID旁邊有一個標籤,上面寫著OAuth2 Client ID。
將這個值複製到剪貼板,並繼續這個教程!
在Xcode中構建並運行你的項目(Command-B是一個方便的鍵盤快捷方式)。如果一切順利的話,Unity會將你的應用程序導出到Xcode,然後編譯並在你的設備上運行應用程序,然後。。。。。發生了什麼?
在你可以在物理設備上運行遊戲之前,需要對Xcode項目進行一些修改。幸運的是,Unity運行的後期構建腳本會彈出一個對話框,告訴你需要做些什麼來使得它能夠正常工作:
那看起來不太嚴重,按照順序處理即可。
添加缺失的框架
在Xcode中,選擇左側的「Unity-iPhone」項目,然後選擇主面板中的「Unity-iPhone」目標。 轉到構建階段,在右側展開「鏈接二進位庫」部分,然後單擊「+」按鈕,彈出對話框,你可以在其中添加要運行的項目所需的所有框架:
這個對話框應該列出了你需要包含的框架,但在撰寫本文的時候,你需要添加以下框架:
· AddressBook
· AssetsLibrary
· CoreData
· CoreTelephony
· CoreText
· libc++.dylib
· libz.dylib
· Security
為了使你更輕鬆一點,你可以按住Command按鈕一次選擇幾個框架。
添加更多的框架
現在你需要下載缺少的SDK。 前往https://developers.google.com/games/services/downloads/頁面。 下載並解壓縮GamesC ++ SDK和Google+ iOS SDK,如下所示:
需要注意的是:請小心:在此頁面上還有一個Ios遊戲 SDK。 即使你正在建立一個iOS遊戲,你也不想要用那個。你需要下載並使用的是C ++ SDK。
瀏覽你剛剛解壓縮的gpg-cpp-sdk文件夾,進入iOS子文件夾,然後將gpg.framework和GooglePlayGames.bundle文件直接拖動到Xcode中。 在生成的對話框中,確保選中Unity-iPhone目標。 是否選擇「Copy items ifneeded 「由你決定。就個人而言,我喜歡這樣做,但如果你是喜歡將所有第三方庫置於一個位置,則可以對其取消選中。
接下來,瀏覽到google-plus-ios-sdk文件夾,並將GoogleOpenSource.framework,GooglePlus.bundle和GooglePlus.framework文件拖動到Xcode中,你將看到它們被添加到框架列表中:
添加-ObjC標誌
最後,返回XCode並為你的目標選擇「構建設置」選項卡。找到「其他鏈接器標誌位」選項 - 它在」鏈接「部分。 雙擊寫著」:-weak_frameworkCoreMotion -weak-ISystem「的部分,然後單擊對話框底部的」+「按鈕添加」-ObjC「標誌。 完成後,你的項目應該看起來是這樣的:
需要注意的是:不要跳過上面添加「-ObjC「的步驟,否則的話這會是一個特別陰險的錯誤,因為你的代碼將可以正常編譯和構建。但是當你運行的時候,你的項目將會遇到一個神秘的」無法識別選擇器「的錯誤。
現在你終於可以回去再運行你的遊戲了!單擊「運行「按鈕,如果 前面都按照按計劃進行,那麼你應該看到你的CircuitRacer在你的設備上運行起來。
真的,遊戲看起來和以前一樣 - 但是下面有一大堆代碼和庫,只是等著你使用它們! :]
玩家登陸
你的第一個任務是在用戶點擊「多人聯網遊戲「按鈕的時候進行用戶登陸。如果你可以讓這部分正確運行,你就知道你已經正確地設置了遊戲服務,你可以繼續開發一個多人聯網遊戲中更有趣的部分。
創建一個新類來處理一些多人代碼。 雙擊Unity資源面板中的」腳本「文件夾。 然後右鍵單擊資源面板,選擇」創建 C#腳本「,並命名新腳本為MultiplayerController。雙擊以便在代碼編輯器中編輯你選中的腳本。
將以下兩個導入添加到文件的開頭:
接下來,找到下面這行:
。。。。並將其替換為以下內容:
然後刪除樣板中的Start()和Update()方法。
如果你剛接觸Unity,你可能不會認識到這裡發生了什麼。你正在創建一段不會作為組件附加到遊戲對象上的代碼, 而是在代碼中純粹創建對象。使用這種方法,你不能使用MonoBehavior作為你的基類,你可以使用ScriptableObject作為你的基類,或者,在這種情況下,根本沒有基類。
接下來,在你的類中添加以下內容,使其創建為單例:
不知道單例是什麼?? 這是一個常見的代碼設計模式,你可以在其中創建一個(而且只有一個)實例的對象,可以輕鬆地被項目中的其他類所引用。
在Unity中,當你需要在多個場景中使用它的時候,將一個類創建為一個單例是有用的。UserPreferences對象是一個很好的例子,因為它是一個需要從主菜單、遊戲和許多其他子菜單場景訪問的對象。同樣,你需要從主菜單和遊戲中訪問MultiplayerController,因此將其作為單例實現有助於你的開發。
為了在以後訪問這個對象,你不需要查找特定的遊戲對象或創建新的對象。相反,你可以調用靜態方法MultiplayerController.Instance,如果這個實例還不存在則此方法將創建此單例,如果已經被實例化就直接返回。
需要注意的是:想了解更多有關單例的內容?查看EliGanem在這個網站上給出的一個很棒的iOS設計模式教程來了解更多詳情。
一些編碼愛好者不是非常喜歡單例,並聲稱單例被過度使用。而這是另一個主題的辯論 - 現在,你還有一個遊戲要做! :]
接下來,修改MultiplayerController()中的代碼,如下所示:
第一行代碼是設置好的日誌,讓內容比較詳細,第二行代碼是告訴PlayGamesPlatform自己進行初始化。
接下來,將以下方法添加到你的類中:
這是你的基本登錄邏輯。調用PlayGamesPlatform.Instance會得到 GooglePlay自己的單例實例。第一個if語句會檢查本地玩家是否已登錄,如果沒有,則調用平台的Authenticate方法,該方法嘗試對用戶進行登陸處理。
還要注意,你傳遞給Authenticate方法的參數本身就是一個函數。 由於Authenticate方法可能需要一段時間才能執行完畢,因此當Authenticate完成的時候,你傳入的回調函數將執行, 這與Objective-C中的塊類似。
現在你有一個方法來登陸用戶,你需要找到一個地方來調用它。
打開MainMenuScript.cs,這個文件可以在MenuStuff文件夾中找到。在OnGUI()方法中找到以下行:
。。。並將其替換為以下內容:
這會調用你剛剛創建的SignInAndStartMPGame()方法。
構建你的項目:
需要注意的是:當你重新構建你的Unity遊戲的時候,你通常需要選擇是替換或是追加你的項目。確保你選擇的是追加:
不要選擇替換,除非你想要把剛才部分的所有設置步驟都重新再做一遍。我知道我不願意!
構建項目後,運行應用程序。應用程序啟動後,單擊「多人聯網遊戲「按鈕。你的面前將出現一個頁面,要求你登陸。請使用在本教程前面部分被你列為「測試人員」帳戶的一個。 點擊」接受「,你將被帶回Circuit Racer遊戲中,將在屏幕頂部看到「歡迎回來!」,並在你的控制台日誌中顯示「我們已登錄!歡迎「字樣的消息,如下所示:
你已經登錄了 - 看起來像一切都正常並進行了正確的認證!
改善登錄過程
停止應用程序並在Xcode中重新啟動它。 請注意,你不再是登錄狀態,但是當你單擊」多人聯網遊戲」按鈕的時候,你將看到「歡迎回來」這條消息,而無需經過登錄過程。這是怎麼回事?
如果你以前登錄過,沒有主動退出,遊戲並不要求任何新的許可,那麼Google Play遊戲會認為你可以再次登錄,而無需再次使用另一個登錄對話框進行登陸,你可以利用「靜默「登陸用戶這一特點。。
你可以利用「靜默「登陸用戶這一特點。。返回到你的MultiplayerController.cs腳本並添加以下新方法:
這看起來非常類似於SignInAndStartMPGame中的代碼。區別在於,你的Authenticate調用結束的時候有一個true參數,指示Play服務嘗試以靜默方式來登錄用戶。也就是說,Google Play會檢查一下,「這是否可以進行用戶登錄而不必顯示對話框?」如果是這樣,它將以靜默的方式進行用戶登錄。
你需要在某個地方調用它。在MainMenuScript文件中將以下代碼添加到Start()方法的末尾:
從Unity內部構建並運行你的項目。 這一次,應用程序應該啟動,一到兩秒後,你將看到歡迎回來的通知和控制台文本,表明你已登錄。點擊「多人用戶「按鈕,你應該在控制台日誌中看到一行信息,表明你已經登錄。
添加退出按鈕
由於你深陷於驗證部分的代碼,你還可以添加一個退出按鈕。你通常不會在主屏幕上放置這樣一個按鈕,因為人們往往不經常登出,可以把它放在設置中的某處。但是,在開發過程中進行測試的時候,我發現可以快速登錄和退出應用程序是非常有用的。
將以下公共變數添加到MainMenuScript類的頂部:
這個公共變數將會引用你的按鈕圖片。
接下來,在for循環之外的OnGUI()的末尾添加以下代碼:
代碼會檢查當前是否有用戶登陸,如果有用戶登陸的話,它會顯示一個按鈕來登錄用戶。如果玩家點擊該按鈕,則應用程序將在你的MultiplayerController上調用SignOut()方法。
接下來,你需要實現你在MultiplayerController中調用的兩種新方法,幸運的是,他們很簡單。返回到MultiplayerController.cs並添加以下兩種方法:
需要注意的是:你是否想知道為什麼要很費勁的在MultiplayerController中調用SignOut(),然後在Play遊戲平台上調用SignOut(),而不是直接在MainMenuScript中調用PlayGamesPlatform.Instance.SignOut()?
這是因為你試圖遵循封裝(或「信息隱藏」)的一般原則,並將所有相關邏輯保持在一個類中,而不是將其分散在許多類中。如果你想把Play遊戲換成一個完全不同的多人聯網遊戲服務,你只需要修改MultiplayerController就可以,你不必更改任何其他代碼。
回到Unity並打開MainMenu場景,單擊層次結構面板中的MainMenuGameObject,你將看到主菜單腳本現在具有當前未定義的「註銷按鈕「條目。 點擊輸入文本欄位旁邊的圓圈,然後從遊戲的資源中選擇btn-signout,如下所示:
GIF/62K
構建並運行你的應用程序。測試登錄和註銷過程幾次,確保其表現一致。確保其表現一致,有退出選項將會非常方便。
接下來將做什麼?
我們這所么多辛苦工作的最終結果是,大量的設置工作已經完成,你終於可以開始構建多人聯網遊戲的有趣部分了。
在這個系列教程的第2部分中,你將解決遊戲的實際的多人聯網遊戲方面的問題。你將添加配對功能,以便你可以將遊戲客戶端與房間內的其他玩家連接在一起,這個配對也可以在全球範圍內進行。你會把對手的車添加到賽車場,你會開始發送和接收遊戲消息,讓你可以得到這些賽車的狀態信息!
【版權聲明】
原文作者未做權利聲明,視為共享知識產權進入公共領域,自動獲得授權。


※《火箭聯盟》PC與Switch平台開放聯網 享受跨平台對決
※VR遊戲《卡坦島VR》登陸Steam支持跨平台多人聯機
※Xbox One《NBA 2K遊樂場2》正式支持與PC Switch跨平台聯機
※《槍火遊俠》現已支持PC/Xbox One/NS的跨平台聯機
※Xbox Live進軍手機遊戲 和iOS/Android全面跨平台聯機指日可待
※PC聯機Switch《火箭聯盟》今年實現跨平台對戰
※PC聯機Switch 《火箭聯盟》今年實現跨平台對戰
※科技來電:買華為 Mate X,還是等三星?谷歌Fuchsia OS可跨平台使用!
※光知道iCloud就Out了!iOS+MacOS跨平台技巧
※我的世界將成為Switch上首款支持全部跨平台聯機遊戲
※索尼為電影《憤怒的小鳥2》發布跨平台VR遊戲《Under Pressure》
※《我的世界》Switch版也將加入跨平台聯機了 只剩PS4還沒動靜
※據傳Xbox One正與Steam就跨平台聯機進行合作
※Epic CEO:PS4 與 Xbox One 跨平台聯機是「不可避免」的
※Epic CEO:PS4與Xbox One 跨平台聯機是「不可避免」的
※微軟希望為Android/iOS/NS用戶帶來Xbox Live跨平台遊戲體驗
※Mozilla推出跨平台社交VR聊天中心「Hub」
※Wi-Fi聯盟推出Easy Mesh認證:可跨平台搭分散式無線網
※閑話遊戲:堡壘之夜CEO稱PS4和Xbox跨平台是大勢所趨
※《Detached》將跨平台PvP模式擴展到VR和非VR玩家