原地址: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>

lssdkconector.h文件我们不用去改动它。保持原样即可。
接下来我们开始在lssdkconector.m
文件中制作c接口 和 调用91sdk的ios方法。
引入必要的头文件后,我把该文件的代码分为3个区域。
代码a区域用来定义c接口必须要实现的api。
代码b区域用来实现a区域代码的接口,以及要调用91sdk的ios方法,直白点说,代码b区域写的方法就是用来调用代码c区域的方法。
代码c区域用来实现真正的91sdk的obj-c方法。
大家在自己的项目中:
代码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文件夹。
将lssdkconector.h 和
lssdkconector.m 复制到 plugins 文件夹中,并在 code文件夹中编写我们的unity调用obj-c
方法。
新建c#文件“lssdkconector.cs”,这个文件中,我们将代码分为a、b两区。
代码a区编写c语言的接口,这里的接口方法要对应”lssdkconector.m”中代码区域b的方法名称。
代码b区编写unity3d调用obj-c的方法,这里的代码注意用来实现unity3d之间的方法调用,c#的方法内调用c的方法。
这样,unity3d接入91sdk-ios版的解决方案到此完成。
下面,我们一下这个解决方案是否管用。
在code文件夹中新建
“lisitest.cs”文件,编辑如下代码:
并将该c#文件拖至main camera
绑定。
unity3d转ios项目必须要设置bundleidentifier,截图:
点击“build”按钮创建ios项目,打开该ios项目,将lssdkconector.h 和
lssdkconector.m拖入ios项目的classes文件夹中
按照91sdk文档中环境配置章节,对sdk进行引用,添加系统库,做环境配置。
打包到ios设备前,检查一下ios项目的配置,注意objc要写在第1列,还有要注意大小写。
选择使用ios设备打包,你会发现unity3d调用ios 成功了!!
本文要告诉大家的是unity3d与ios交互的解决方案,代码规范问题不是本文重点,比如91sdk的初始化在sdk文档上推荐是在appdelegate的文件中进行初始化。
附件: <ignore_js_op>
(2.25 kb, 下载次数:
401)
unity3d与android之间的交互可以参考我的另一篇文章: