天天看点

UNITY3D与iOS交互解决方案

原地址:http://bbs.18183.com/thread-456979-1-1.html

本帖最后由 啊,将进酒 于 2014-2-27 11:17

编辑

“授人以鱼,不如授人以渔”,以unity3d调用ios版的91sdk为例,利用c# / c / obj-c 交互原理,本文将详细介绍unity3d与ios之间交互的解决方案。

首先,打开xcode新建一个空项目,参照91sdk开发文档将91sdk引入并进行环境配置。

配置完毕后创建一个名为“lssdkconector”的obj-c

class文件。完毕后,当前项目应如图:

<ignore_js_op>

UNITY3D与iOS交互解决方案

lssdkconector.h文件我们不用去改动它。保持原样即可。

UNITY3D与iOS交互解决方案

接下来我们开始在lssdkconector.m

文件中制作c接口 和 调用91sdk的ios方法。

引入必要的头文件后,我把该文件的代码分为3个区域。

代码a区域用来定义c接口必须要实现的api。

UNITY3D与iOS交互解决方案

代码b区域用来实现a区域代码的接口,以及要调用91sdk的ios方法,直白点说,代码b区域写的方法就是用来调用代码c区域的方法。

UNITY3D与iOS交互解决方案

代码c区域用来实现真正的91sdk的obj-c方法。

UNITY3D与iOS交互解决方案

大家在自己的项目中:

代码a区域作为可直接复制套用;

代码b区域可编写工具方法和调用ios的方法;

代码c区域编写91sdk的ios方法,你需要什么api就写什么,写完了在代码b区域添加c的调用方法即可。

在编写代码中,有的人可能会问obj-c中有的api有回调,unity是如何知道obj-c回调结束呢?

答:obj-c调用unity的api,可以用“unitysendmessage”的方法 ,具体使用方法

看uinty的使用帮助。

这样我们完成了c接口和91sdk的api代码,接下来我们做uinity3d方面的代码处理。

我们在unity3d项目的assets下新建code文件夹与plugins文件夹。

UNITY3D与iOS交互解决方案

将lssdkconector.h 和

lssdkconector.m 复制到 plugins 文件夹中,并在 code文件夹中编写我们的unity调用obj-c

方法。

新建c#文件“lssdkconector.cs”,这个文件中,我们将代码分为a、b两区。

代码a区编写c语言的接口,这里的接口方法要对应”lssdkconector.m”中代码区域b的方法名称。

UNITY3D与iOS交互解决方案

代码b区编写unity3d调用obj-c的方法,这里的代码注意用来实现unity3d之间的方法调用,c#的方法内调用c的方法。

UNITY3D与iOS交互解决方案

这样,unity3d接入91sdk-ios版的解决方案到此完成。

UNITY3D与iOS交互解决方案

下面,我们一下这个解决方案是否管用。

在code文件夹中新建

“lisitest.cs”文件,编辑如下代码:

UNITY3D与iOS交互解决方案

并将该c#文件拖至main camera

绑定。

unity3d转ios项目必须要设置bundleidentifier,截图:

UNITY3D与iOS交互解决方案

点击“build”按钮创建ios项目,打开该ios项目,将lssdkconector.h 和

lssdkconector.m拖入ios项目的classes文件夹中

UNITY3D与iOS交互解决方案

按照91sdk文档中环境配置章节,对sdk进行引用,添加系统库,做环境配置。

打包到ios设备前,检查一下ios项目的配置,注意objc要写在第1列,还有要注意大小写。

UNITY3D与iOS交互解决方案
UNITY3D与iOS交互解决方案

选择使用ios设备打包,你会发现unity3d调用ios 成功了!!

本文要告诉大家的是unity3d与ios交互的解决方案,代码规范问题不是本文重点,比如91sdk的初始化在sdk文档上推荐是在appdelegate的文件中进行初始化。

附件: <ignore_js_op>

UNITY3D与iOS交互解决方案

  (2.25 kb, 下载次数:

401)

unity3d与android之间的交互可以参考我的另一篇文章: