unity和ios交互(互相调用方法)

最近做了一个小游戏,用到了ARkit插件需要访问ios的相机权限(权限问题很简单,网上一搜一大堆,我在这也贴一下吧)

  1. build setting -->  player setting  -->  other setting   -->图片红框部分添加使用相机的描述即可
  2. 在Xcode里infolist 里添加权限

sprite

但是用户拒绝了相机权限,游戏还能运行这就出现了问题,场景画面就全是黑的了,我要判断游戏是否获取到了相机权限, 这就牵扯到unity和ios交互了,可我没接触过这方面的操作,对xcode的结构也是一脸懵逼,所以在网上找了资料,摸索了两天终于勉强把功能实现了

先处理unity这边的代码 

  •  [DllImport("__Internal")]这个方法相当于是告诉Unity,有一个unityToIOS函数在外部会实现。
  • 使用这个方法必须要导入System.Runtime.InteropServices;
  • 我写的是 程序运行之后过2秒调用这个外部的方法
  • 最下面两个方法 是外部回调的方法

using System.Runtime.InteropServices;


[DllImport("__Internal")]

  private static extern void unityToIOS();

unity和ios交互(互相调用方法)_第1张图片    

 

然后处理Xcode这边

  • 我不懂xcode这边的结构 在网上查的是 在main.mm 程序入口运行之后,会运行当前这个 untiyAppController.mm这个文件,所以我就把代码写到这里面了,没有什么依据就是自己瞎琢磨的,然后写入两个头文件,这就像C#的导入命名空间,判断ios端相机相册要用到
  • 然后继续在这个 untiyAppController.mm文件的下面 实现 在unity里声明的那个unityToIOS函数
  • 然后我在这个函数里判断是否有权限 然后再用 UnitySendMessage()方法去调用unity里的函数,那两个方法为什么要传参数,因为 UnitySendMessage()这个方法需要传参数,所以我就传了,我知道这样很傻,可是没有经验啊,自己琢磨真的头大,最后发布测试,成功运行。。。。。。

unity和ios交互(互相调用方法)_第2张图片

unity和ios交互(互相调用方法)_第3张图片

#import
#import


extern "C"
{
    void unityToIOS()
    {
        
        AVAuthorizationStatus authStatus = [AVCaptureDevice authorizationStatusForMediaType:AVMediaTypeVideo];
        if (authStatus == AVAuthorizationStatusRestricted || authStatus ==AVAuthorizationStatusDenied) {
            UnitySendMessage("Canvas", "notopencamera", "ss");
        } else {  //做你想做的(可以去打开设置的路径)
            
            UnitySendMessage("Canvas", "loadmain", "ss");
            
        }
    }
}

 

unity和ios交互(互相调用方法)_第4张图片

 

你可能感兴趣的:(ARKit,iOS,unity)