一.小记
最近公司有个需求,需要用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即可解决。
欢迎支持我的新浪微博:任性的驴
欢迎关注!!!
网友评论