如何使用 Unity ARCore SDK 拍摄和保存图片/屏幕截图?

How to take & save picture / screenshot using Unity ARCore SDK?

我在这里找到了本机操作的答案,但我 运行 Unity。

How to take picture with camera using ARCore

我不确定如何访问 Unity 表面渲染器线程才能放入这些函数。

This looks 喜欢一个好的开始。想法?

编辑:

使用 Texture2d ReadPixels 或 ScreenCapture.CaptureScrenshot 不可行,因为它们会阻塞渲染线程。下面的代码足以阻塞线程。

StartCoroutine(TakeScreenshot());

private IEnumerator TakeScreenshot()
    {
        yield return new WaitForEndOfFrame();

        Texture2D ss = new Texture2D(Screen.width, Screen.height, TextureFormat.RGB24, false);
        ss.ReadPixels(new Rect(0, 0, Screen.width, Screen.height), 0, 0);
        ss.Apply();

编辑 2:Am considering using this technique。如果成功会回来报告。

你想学习如何做吗?如果您只是想截取屏幕截图 - 它内置于 Unity 中。参见 https://docs.unity3d.com/ScriptReference/Application.CaptureScreenshot.html

我发现 this repo on github 这使得使用本机 iOS 和 Android 代码将屏幕截图保存到设备变得非常简单。从技术上讲,您可以只使用 Texture2D 捕获代码来获取屏幕截图,但后续的 NativeGallery 调用允许您将其写入设备。 GitHub 自述文件介绍了您需要启用哪些设置才能写入设备。

private void ScreenshotButtonClicked()
{
    StartCoroutine(TakeScreenshot());
}

private IEnumerator TakeScreenshot()
{
    SetUIActive(false);

    yield return new WaitForEndOfFrame();

    Texture2D ss = new Texture2D(Screen.width, Screen.height, TextureFormat.RGB24, false);
    ss.ReadPixels(new Rect(0, 0, Screen.width, Screen.height), 0, 0);
    ss.Apply();

    NativeGallery.SaveToGallery(ss, "Native Screenshots", DateTime.Now.ToString().Replace("/", "-"));

    SetUIActive(true);
}

private void SetUIActive(bool active)
{
    Button.gameObject.SetActive(active);
    ScaleSlider.gameObject.SetActive(active);
}

ARCore 提供了自己的 TextureReader class,速度非常快,并且不会重现提到的副作用。 TextureReader_acquireFrame

https://github.com/google-ar/arcore-unity-sdk/blob/master/Assets/GoogleARCore/Examples/ComputerVision/Scripts/TextureReaderApi.cs