Unity3D项目实战笔记(9):Unity3D接入IOS SDK技术预研

为了使得Unity3D的程序在IOS下运行,需要做一些SDK接入工作:如访问IOS系统照相机、如调用微信支付、支付宝支付等,故需要先做接入IOS SDK的预研工作,本文整理一下自己的学习心得,总结如下:

 

Unity3D和IOS SDK交互,主要分2个步骤:

1 在Object C中,封装一个 extern “C”接口

2 然后,在C#通过 dllimport调用即可。

 

下面通过3个例子,来一一实践:

例子1: 获取最大数字

Object C封装-CWraper.h

extern "C"
{
    int GetMax (int left, int right);

}

Object C封装-CWraper.mm

int GetMax (int left, int right)
{
    return left > right? left:right;
}

 

Unity3D 封装:

[DllImport ("__Internal")]
private static extern int GetMax (int left, int right);

 

例子2: 调用IOSAlert对话框

Object C封装:

extern "C"
{
    const char* CallIOS_ALert(const char * msg);

}

 

const char* CallIOS_ALert(const char * msg)
{

    NSString * nsMsg = [NSString stringWithUTF8String: msg];
    
            UIAlertView *alert = [[UIAlertView alloc] init];
            [alert setTitle:@"IOS程序世界"];
            [alert setMessage:nsMsg];
            [alert addButtonWithTitle:@"确定"];
            [alert  show];
    
    
    return SafeStringBack("Main Camera");;
}

 

Unity3D 封装:

[DllImport ("__Internal")]
private static extern string CallIOS_ALert (string msg);

 

Object C的工具函数: Const Char* 和NSString转换的

//XCode的字符串转换为Unity字符串
const char* SafeStringBack(const char *inputMsg)
{
    char* retC = (char*)malloc(strlen(inputMsg) + 1);
    strcpy(retC, inputMsg);
    return retC;
}

const char* SafeStringBack(NSString *inputMsg)
{
    return SafeStringBack([inputMsg UTF8String]);
}

 

例子3:Object C回调Unity3D

这里我们通过 UnitySendMessage来返回数据,稍微注意,字符串需要封装一下。

            const char* obj = SafeStringBack("Main Camera");
            const char* method = SafeStringBack("ShowXCodeMessage");
            const char* varVal = SafeStringBack("this is xcode.");
            UnitySendMessage(obj, method, varVal);

Unity3D中,需要有“Main Camera”的对象,以及有一个public的函数"ShowXCodeMessage"。

 

自此,预研的事情搞定了,则其余的接入IOS SDK,则是看各个官方demo、文档,然后估计工作量的事情了。

 

归纳:

Unity3D和IOS SDK交互,本质上上C#和Object C(C++)的PInvoke;源码层面的交互,相对Android的Jar包要简单一些---源码在手,了无秘密。

 

备注:

  1. Android的Unity3D交互博客链接: 《Unity3D项目实战笔记(4):Unity3D接入Android SDK
  2. Object C如果编译不通过,请修改*.m文件为*.mm文件:Object C、C++混合编译方式
  3. 一般在Unity导出的XCode工程下,写IOS Plugins,代码写完才可以编译ok。
「点点赞赏,手留余香」

    还没有人赞赏,快来当第一个赞赏的人吧!