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 for iOS 打开相册、相机及保存图片到相册

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

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

  • 2017年10月09日 13:42
  • 3.8MB
  • 下载

Unity安卓Android与iOS保存图片并显示在相册

1.安卓 安卓手机有可能有SD卡 有可能没,如果有SD卡,直接用unity的截屏API或者Application的路径会同时保存, 下面写存在手机内部。  //存储路径destinatio...
  • u014528558
  • u014528558
  • 2017年01月23日 10:26
  • 2219

Unity3D之iOS拍照

http://www.cnblogs.com/U-tansuo/archive/2012/07/11/IOS_U_tansuo.html 为了尊重作者只挂了链接 直接调用了iOS native c...
  • cynixway
  • cynixway
  • 2012年07月31日 10:33
  • 1497

Unity打开IOS/Android图库和相机获取相片

  • 2017年04月10日 10:34
  • 8.02MB
  • 下载

Unity3d本地上传并且裁剪图片-----iOS平台

注:引擎版本unity4.x 最近项目需求,需要做用户头像,要求: 1.  可以从本地上传 2.  本地裁剪 3.  压缩控制大小 4.  在三个平台实现PC/Android/IOS 弄了好几天总是搞...
  • u014261855
  • u014261855
  • 2016年05月09日 11:15
  • 3093

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

  • 2016年02月26日 13:20
  • 3.47MB
  • 下载

在unity中将图片保存在移动平台下(Android和IOS)

在项目中我们会用到将截取的图片保存到本地,然后在本界面或者是其他界面中显示出来。 void Start()         {             PhotoButtonClick(); ...
  • caojianhua1993
  • caojianhua1993
  • 2016年06月15日 17:30
  • 1374

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

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

Unity Android/IOS 打开图片库和相机,并加载图片

最近在做一个Unity调用IOS/Android调用原生相机以及相册的项目时,Xcode提示ARC forbids explicit message sendof 'retain' 'retain'...
  • he_wen_jian
  • he_wen_jian
  • 2016年05月26日 11:28
  • 2602
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Unity与IOS交互,调用IOS系统相机和相册
举报原因:
原因补充:

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