Unity iOS混合開發

我的第一篇博客是寫的Unity和Android平臺混合開發相關,接觸iOS和Object-C也有一段時間了,此次,將講述下Unity與iOS混合開發的原理,也爲Unity高級移動端混合開發做下鋪墊。閒話少說,直接上代碼!

首先在代碼之前我們先了解下Unity與iOS最基本的通訊方式https://docs.unity3d.com/Manual/PluginsForIOS.html

Unity的這篇文檔主要講述了Unity通過C#定義[DllImport ("__Internal")]func 函數接口,iOS端從過C++聲明func的實現,達到Unity直接調用iOS端原生代碼

舉個播放廣告的例子:

C#端定義

        [DllImport("__Internal")]
        private static extern void showRewardVideo();

iOS端C++實現,

爲實現統一管理,新建任意名稱的.mm文件進行管理您自己寫的Unity插件封裝類(也可以通過Unity Postbuild的方式,強行將此函數寫入你想指定的位置,寫到哪無所謂,只要函數名稱和簽名能與C#中的定義對應)



extern "C"{
  -(void)showRewardVideo{
     [[AdsManager shareInstance]showRewardVideo];
  }
}

Unity 中直接添加.mm文件

iOS端Object-C實現

//單例
+(instancetype)shareInstance{
    static AdsManager *manager=nil;
    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
        manager = [AdsManager new];
    });
    return manager;
}


//AdsManager.h函數聲明
-(void)showRewardVideo;


//AdsManager.mm函數實現
- (void)showRewardVideo{
  //具體的實現代碼
}

上面講述了Unity如何調用iOS的代碼,下面將講述iOS如果調用Unity

先粘貼一段源代碼。此段代碼就是iOS如何實現與Unity進行調用的


//obj:Unity Scene中的GameObject對象名稱
//method:Unity Scene中的GameObject對象身上繼承MonoBehaviour的C#腳本的接收iOS函數聲明
//msg:發送的消息
void    UnitySendMessage(const char* obj, const char* method, const char* msg);

 

iOS端Object-C中函數中進行調用

UnitySendMessage("AdsManager", "Callback", "測試");

Unity接收

C#函數實現

void Callback(string message){
   Debug.LogError(message);
}
        

如上所示,Unity和iOS的交互就已經實現了,其實對與Unity程序來說C#端的處理實際上很簡單,難點是對與沒有任何iOS開發經驗的Unity開發需要掌握一些iOS開發的基礎

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章