美文网首页深海iOS DeveloperiOS 开发
iOS与unity3D交互整合的那些事

iOS与unity3D交互整合的那些事

作者: 矫炎圻 | 来源:发表于2016-05-10 16:16 被阅读9671次

一.小记

最近公司有个需求,需要用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项目中进行整合,我还会继续更新!

----------------------------------------------------------------------------------------------------

2017年03月10日09:49:20  更新

----------------------------------------------------------------------------------------------------

有很多朋友会问,自己添加的点击事件不响应,实例方法不响应,但是类方法却响应。这里其实是在程序运行的时候,你所添加button的视图控制器被U3D的系统方法替换掉了,导致按钮被释放,所以肯定也不会有事件响应了,下图注释的部分就是U3D系统替换你的ViewController的方法。

U3D系统方法会换掉你的控制器

所以想要保证视图控制器不被释放,在创建的时候要加一个static即可解决。

欢迎支持

我的新浪微博:任性的驴

欢迎关注!!!

相关文章

网友评论

  • macfai:你好,大神,最近公司有这个需求,想加你qq,请教下,谢谢
  • b95f0ca6ca78:你这个微信转账很凶残啊,哈哈
  • 心在前方:你好,我想问下你,这种加的btn在游戏的所有界面都能看到,怎么做到只有在特定界面看到呢?
    不思量自然忘:我们也遇到了这个问题 不知大佬解决了吗
  • 8ee595aa79c0:您好,请教下,为什么uibutton不响应点击事件?
    8ee595aa79c0:@矫炎圻 :+1:
    矫炎圻:已更新文章
  • 萧凡:什么时候更新。项目镶嵌到iOS中
    矫炎圻:@星空梦想 你可以试一试,内存特别高。
    星空梦想:内存不会爆吧!
    矫炎圻:@萧凡 U3D整合到项目中了,但是因为内存爆炸问题被公司废掉了,整合过程中到处是坑,如有需求可以私聊我。
  • 萧凡:什么时候更新。项目镶嵌到iOS中
  • 願時光待我如初:我整合的时候出了个问题说的出错的文件时cstring,我就懵了
  • 28bb64fffadd:问下楼主你的buttonclick的方法,是吧上一个unity的画面杀死,再重新载入一个新的吗?我项目需要点击unity的一个button,实现退出,再点击进去后是重新加载,;但是现在只有UnityPause的方法
    矫炎圻:@鲫鱼博博 不是的 原理上实际是通过发送方法名来调用特定的方法,从而切换3D模型的摄像机,达到改变视角的目的,实际上核心的部分还是U3D的人做的。
  • 熊啊熊啊熊:请问一下 我能把这个当做功能集成到项目中吗?
    矫炎圻:@熊啊熊啊熊 可以
  • 洛洛卡:集成的步骤坑多么
    矫炎圻:@Coder_Hui 加我Q 547720714
    22a926629226:求Demo
    矫炎圻:@洛洛卡 还好只有一个坑,还没空出时间去解决,不是什么难题。 :relaxed:

本文标题:iOS与unity3D交互整合的那些事

本文链接:https://www.haomeiwen.com/subject/tdhyrttx.html