天天看點

Unity3D 接入IOS SDK

Unity3D 開發遊戲需要接入平台方的SDK才能夠正式釋出,本文記錄IOS SDK接入的流程。

Unity與IOS的互調

要實作遊戲SDK的接入,首先要解決的是Unity3D與原生IOS代碼之間的互相調用問題。Unity使用C#作為開發語言,而IOS采用Objective-C作為開發語言,如何讓C#調用OC代碼,或者讓OC調用C#代碼。所幸OC和C#都支援直接嵌入C/C++代碼,這裡使用C作為兩者之間的橋梁。

為了簡化兩者之間的接口調用和資料傳遞,在設計Unity與IOS SDK之間的接口時,Unity調用SDK隻有一個接口,而SDK調用Unity也隻有一個接口。由于平台方的SDK差異性較大,如何保證一個接口可以解決問題?這裡我們開發了一個通用SDK層,遊戲隻會與通用SDK層互動,而由通用SDK層再與具體的平台SDK對接。

Unity中調用SDK層的功能:

unity中所有的調用都轉化為CallSDKFunc,該函數由通用SDK提供,參數type表示功能分類,jsonpara是以json字串表示的一系列參數。

通用SDK調用傳回結果給Unity

這裡使用unityengine.dll提供的C接口UnitySendMessage,這裡第1個char* 表示接受該消息的GameObject的name, 第2個表示該GameObject的腳本中接受消息的函數名,第3個表示傳遞的資料,這裡我們還是使用json來傳遞,同時附帶消息類型。

SDK暴露的C接口的聲明與定義

這裡CallSDKFunc即上述Unity調用SDK的接口,在OC層,直接由SDKConnector類接收,并分發處理。

通用SDK

SDKConnector負責消息的分發

這裡根據type類型将消息分發到通用SDK層對應的處理子產品,再由通用SDK層去調用平台SDK的API進行具體的處理,注意這裡傳入了一個執行個體SDKListener,SDKListener負責接送平台SDK的回應,并将資料發送至Unity側。

通用SDK層的功能

目前包含以下常見的子產品:登入,登出,切換賬号,充值,使用者中心,使用者論壇,使用者回報,防沉迷,實名認證。以及各項遊戲資料的上報:選服,進入遊戲,建立角色,更新等等。

應用生命周期SDK

SDK中比較特殊的一類,基本上也是所有SDK都需要接入的API是生命周期API,本文處理項對比較特殊一點。

這裡定義了一個SDK生命周期監聽的協定SDKLifeCycleListener, 以及注冊該協定的接口SDKRegisterLifeCycleListener。在App加載的時候,将該監聽注冊進去,實作該協定的也是SDKListener。

小結

至此,大概介紹了一下所實作的IOS SDK的方法。簡而言之,unity通過CallSDKFunc調用通用SDK功能,通用SDK通過SDKConnector分發消息給具體的通用SDK子產品,再由平台SDK處理。SDKListener負責接收平台處理的結果和生命周期事件,并将需要的結果傳回給Unity。

就目前的實作來看,能夠較好的相對解耦遊戲與SDK之間的聯系,不會因平台的差異性導緻遊戲代碼的頻繁改動。當然目前接入的SDK還相對較少還需測試。