我的第一篇博客是寫的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開發的基礎