iOS 与 unity3D 交互整合的那些事

阅读 672
收藏 13
2017-02-21
原文链接:www.jianshu.com

一.小记

最近公司有个需求,需要用unity3D建立3D模型,并且实现切换功能,由于做开发时间不算长,又没有接触过unity3D, 所以只能一头雾水去网上查找资料,也看了雨松MOMO的文章,不过都是几年前的了,有些东西已经不适用了,只能边看边研究,今天终于有点眉目了,可以在unity3D导出的iOS工程文件的基础上,对3D建模的页面进行修改,并能够执行一些操作了。

二.实现细节

unity3D 版本: 5.3.4

Xcode    版本: 7.3.1

首先就是需要做unity3D的人员将相应的模型上绑定好脚本,并告知你模型或者说要操作的对象的名称和要调用的方法名称,这里由于我要实现的是切换摄像机的角度,所以名称为mycamera(我希望是驼峰命名myCamera,可惜unity3D那边不是我写的,就不要在意这些细节了,自己注意就好),导出的时候在playerSetting中做好各种设置,选择使用模拟器调试、SDK版本什么的,这里就不赘述了。

导出的包如果是压缩后传过来的,那么解压后需要稍等一会才能看见文件夹中的xcodeproj文件,不知道什么原因可能是文件太大了吧......

打开xcodeproj文件,首先编译一下试试,很大可能报一个错误


编译报错

意思是说MapFileParser.sh文件没有权限执行,这样我们进入中端,给予这个文件权限


给MapFileParser.sh权限

这样,报错就能够成功解决了,再次运行就会出现没有加工处理过的原生的unity3D的内容了


比如像这个杯子的3D模型

文件能正常编译运行,我们就可以进行下一步了。

我们在导出的工程中自己添加文件MyViewInit


添加自己的文件

在文件中写入自己想要实现的代码


MyViewInit.h



MyViewInit.m

MyViewInit.m

当一个简单的界面搭建好之后,我们就要先测试一下是否能够添加到U3D模型界面,在工程文件夹中找到Classes文件夹,点击展开,找到UnityAppController.mm文件,该文件是U3D工程的启动文件


找到UnityAppController.mm文件

在文件的最上部分,导入自己写的文件的头文件

#import "MyViewInit.h"

找到方法


didFinishLaunching

在方法最底部添加布置UI的代码


布置UI

其中UnityGetGLViewController() 是U3D模型视图中的根视图控制器

(如果在老版本的unity3D中可能需要对此进行更改)

然后就可以点击运行进行测试了,不出什么意外的话,就可以显示在模型视图上了


添加UI控件后的视图

怎么样,效果立竿见影吧!

下面进行最重要的一步,向U3D模型发送消息,回到MyViewInit.m文件,为两个button添加的点击事件完成实现,别忘了在.h文件声明


实现button点击事件

为了防止发生小意外找不到错误,可以先在这里打印,看看按钮是否响应点击事件,如果能成功打印,那就万事大吉了。


这里要着重说一点,雨松MOMO在他的一篇文章中讲述了这方面的内容,他使用的是继承自UIViewController的文件,并使用对象方法来写UI和点击事件,不知道为什么,添加的UI空间可以显示,但是button不响应点击事件,我还暂时没有深究原因,待后续更新。


在点击事件中,使用U3D已经写好的方法

UnitySendMessage("mycamera", "changeModel", "");

第一个参数 填写接受方法的物品或者模型名称。

第二个参数 填写方法名字。

第三个参数 填写要穿的参数,没有要传的参数直接写"",这里不能写nil,会crash。

这样再次运行,就可以啦,我这里实现的是点击按钮切换模型


切换模型

后续还会将此工程嵌入到已完成的iOS项目中进行整合,我还会继续更新!

我的新浪微博:任性的驴

欢迎关注!!!

评论