Unity踩坑日志:关于unity与iOS交互的坑

在原生中调用unity导出的iOS工程

1.一个需求是进行截屏,同时隐藏UI,截屏之后显示UI,并显示“已保存至系统相册”的提醒(一秒后消失)。

参照的文章 :Unity 截屏功能(安卓、IOS),以及 Unity iOS保存截图到iOS相册。

第一个坑:隐藏UI失败。照片上不仅有UI,还有保存提醒。

检查log发现隐藏UI的(协程)方法的log没有打印。将全部方法(包括拍照,隐藏UI)写在协程中在start里进行调用,截屏方法不执行。

我觉得可能是与iOS的交互上使用协程有些问题吧。。改用invoke方法进行UI的延时操作,成功!

第二个坑:截屏的时候保存图片的问题。每一次保存的为上一次拍的图片。第一次拍的图片不能及时存储下来。

结合参考文章发现每一次unity读取iOS地址并把图片存放在沙盒后,将图片地址过早的传递给了iOS。

将传递地址的方法放在UI显示操作后面执行(UI显示的方法在截图方法后执行),解决!

以下是在unity工程中的代码:

using UnityEngine; using System.Collections.Generic; using System.Runtime.InteropServices; using System.Collections; public class Takephoto_ios : MonoBehaviour { [DllImport("__Internal")] private static extern void _SavePhoto(string readAddr);//将读取地址传给iOS private string _cptrAddr; public Canvas UI; public GameObject Save; public void OnClick() { UI.enabled = false; Debug.Log("TakePhoto"); var cptrAddr = "testpic"; //捕捉地址 var readAddr = Application.persistentDataPath + "/" + cptrAddr;//读取地址,这两个地址在iOS里不一样 Debug.Log("cptr:" + cptrAddr + ", read:" + readAddr); ScreenCapture.CaptureScreenshot(cptrAddr); _cptrAddr = cptrAddr; // this.Invoke("save", 1.0f); Debug.Log("-----------save"); this.Invoke("XianshiUI", 0.5f); } void save() { Debug.Log("_SavePhoto"); var readAddr = Application.persistentDataPath + "/" + _cptrAddr; _SavePhoto(readAddr); // this.Invoke("XianshiUI", 0.5f); } void XianshiUI() { Debug.Log("第一个先让UI显示"); UI.enabled = true; Save.SetActive(true); save(); this.Invoke("xiaoshitixing", 2.0f); } void xiaoshitixing() { Save.SetActive(false); Debug.Log("保存提醒消失吧"); } }

你可能感兴趣的:(Unity踩坑日志:关于unity与iOS交互的坑)