Unity与IOS交互,调用IOS系统相机和相册

原创 2016年05月29日 19:23:06

前面两篇总结了一下unity与android的简单交互和调用安卓系统相机和相册,比较蛋疼的是,后来发现不同的测试机上会有不同的bug。。。下阶段要一个一个的解决一下


今天总结一下与IOS的交互。这次我会跳过ios单独的调用相机和相册的讲解,因为我对IOS不专业,讲不好,如果有需要的可以直接从网上搜,比我讲的专业。我主要说一下unity和IOS交互的问题。本来这个问题网上也是有很多帖子讲的(虽然基本上都是抄过来抄过去的),但是我在做的过程中还是遇到了一些大牛没有讲到的东西,所以,我觉得还是有必要再讲解一下,把我自己遇到的问题和解决的方式总结一下。


与IOS的交互,在步骤上要比android简单许多,不会产生因为系统版本,或者包名导致的许多问题。过程中最头疼的一个问题是IOS回调Unity,很简单的一个问题,搞了半天。不管是ios还是android,要调用unity中的方法,都是通过UnitySendMessage()方法,Android是引入class.jar包,在包中包含这个方法,但IOS中怎么引入这个函数呢,网上查了半天没有头绪...原来是unity跟IOS交互的基本方式没搞明白,最核心的步骤是这样的:


1,在unity中新建一个项目

2,然后打包成xcode项目

3,在Xcode中进行编辑

4,把添加的*.mm文件和*.h文件添加到unity原始项目的plugins文件夹下


下面进入正题,开始撸代码。

首先新建一个unity项目,搭建一个界面,界面上有两个button和一个显示图片用的texture。新建一个cs脚本:


其中需要重点说一下的是第3行和第11-14行。第三行是为了引入DllImport方法,第11-14行是引入在xcode中定义的两个方法,这两个方法会在后面讲到。格式就是这样的,你能修改的只有函数名。



很简单的三个方法。分别是打开摄像机,打开相册,和IOS回调Unity。


第二步,打包成Xcode工程。

然后,新建一个*.m文件和*.h文件,我的习惯命名为UnityTest.m和UnityTest.h。

.h是头文件,文件内容如下:


要引入头文件<QuartzCore/CACisplayLin.h>,因为UnitySendMessage()方法定义在这里面...

还需要继承UIViewController类和后面的两个接口。父类是为了进入IOS界面,接口是打开相机用的。


下面是.m文件的内容:


OpenTarget方法的 type 参数是为了区分,打开的是摄像机还是相册。 这个方法里是对打开参数的一些设定,还有其他的一些参数也是在这里进行设定。最后 一句是具体执行打开相机或者相册的代码。这里不需要关心裁剪的问题,拍完照或者选择好照片后会自动进入裁剪界面。


操作完成确定后IOS内部的回调方式如下:



这个方法是自动调用的,如果是有进行录像,还需要在这个方法里判断一下info参数的内容,因为我这里只是取图片,所以就省略了这一步。

在这个方法里要对图片进行保存,下面是执行保存的方法:


以上第一个是获取保存路径,第二个是具体的保存文件的方法,在这里保存的时候是把图片首先转换成了二进制数据。


摄像机和相册的取消选项的回调函数声明如下:


这里直接反馈给Unity,传回的参数为“”。


下面进入最后一步。声明供unity调用的方法。unity能够调用的两个方法,按下面的格式进行声明(还是在.m文件中):



extern "C"是固定语法,据说这是C++的东西,所以,.m文件的后缀必须改成.mm,这样才能进行语法支持。


因为对OC的语法并不是很熟悉,所以具体每行代码的意思就不仔细说了,怕误人子弟,大家有不懂的直接网上查吧。其实个人觉得这里面也没什么很晦涩的代码,联系上下文自己理解一下,即便是不懂OC也理解个差不多。


说一个自己犯的低级错误:在xcode的调试信息中打印了一句SendMessage:object getImage not found!表现出来的症状就是回掉unity后,图像没有加载出来...
问题的原因是UnitySendMessage()方法的第一个参数,是接收ios回掉信息的那个类所挂载的物体。而我...没有声明这个对象,直接挂到了摄像机上...



欢迎转载。转载请注明:
Hello光头原创
如有建议或意见,欢迎留言。
也欢迎大家加我qq,一起学习进步:1009570451

版权声明:Hello光头原创,欢迎交流拍砖扔鸡蛋,qq:1009570451

相关文章推荐

Unity和ios进行相册的一些交互

关于unity和相册交互,其实很多人写过,包括大神雨松,但小妹我的这篇绝对也是原创,由于最近这个项目中搞了好久的这东西,所以打算写出来给大家分享一下,希望对大家有所帮助。 说说ios的大概的思路吧,...

Delphi7高级应用开发随书源码

  • 2003年04月30日 00:00
  • 676KB
  • 下载

Unity for iOS 打开相册、相机及保存图片到相册

在这里简单,实现一个 Unity for iOS 打开相册、相机及保存图片到相册的功能。主要有两个方面:1、unity 与 ios的交互、ios下的objective-c的相关api。具体的看代码吧,...

Delphi7高级应用开发随书源码

  • 2003年04月30日 00:00
  • 676KB
  • 下载

Unity iOS保存截图到iOS相册

http://fairwoodgame.com/blog/archives/22 今天开发了一个在Unity里将屏幕截图保存到iOS照片应用的功能,非常简单,当然,读者最好对Unity和iOS的集成有...

unity 打开相册选择图片

最近做项目需要用到这个功能,就是在Unity中调用Android本地相册或直接打开摄像机拍照并且裁剪一部分用于用户头像,今天研究了一下,那么研究出成果了MOMO一定要分享给大家。Unity与Andro...

Delphi7高级应用开发随书源码

  • 2003年04月30日 00:00
  • 676KB
  • 下载

Delphi7高级应用开发随书源码

  • 2003年04月30日 00:00
  • 676KB
  • 下载

Unity3D,获取相册图片,手机拍照

Unity端 先新建个项目吧,添加一个Button和两个UIimage吧。之后我们提取的相片会在UIimage上显示。 至于为什么要两个,主要是一会我还要进行图片的压缩。然后把小图也显示出来。 新建...

Delphi7高级应用开发随书源码

  • 2003年04月30日 00:00
  • 676KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Unity与IOS交互,调用IOS系统相机和相册
举报原因:
原因补充:

(最多只允许输入30个字)