欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Unity iOS混合开发

程序员文章站 2022-07-14 21:33:24
...

我的第一篇博客是写的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#中的定义对应)

Unity iOS混合开发



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

Unity 中直接添加.mm文件

Unity iOS混合开发

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接收

Unity iOS混合开发

C#函数实现

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

如上所示,Unity和iOS的交互就已经实现了,其实对与Unity程序来说C#端的处理实际上很简单,难点是对与没有任何iOS开发经验的Unity开发需要掌握一些iOS开发的基础