C# 如何在unity中拍摄可用于IOS和Android的屏幕截图

C# 如何在unity中拍摄可用于IOS和Android的屏幕截图,c#,android,ios,unity3d,augmented-reality,C#,Android,Ios,Unity3d,Augmented Reality,我怎样才能在unity中拍摄ingame屏幕截图,从而在IOS和Android中保存到gallery中 using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; public class TakeScreenshot : MonoBehaviour { [SerializeField] GameObject blink; pu

我怎样才能在unity中拍摄ingame屏幕截图,从而在IOS和Android中保存到gallery中

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;

public class TakeScreenshot : MonoBehaviour {

    [SerializeField]
    GameObject blink;
    public Text text;
    public Transform canvas;

    protected const string MEDIA_STORE_IMAGE_MEDIA = "android.provider.MediaStore$Images$Media";
    protected static AndroidJavaObject m_Activity;

    public void TakeAShot()
    {
        StartCoroutine(CaptureIt(Screen.width, Screen.height));
    }

    IEnumerator CaptureIt(int width, int height)
    {
        yield return new WaitForEndOfFrame();
        Texture2D tex = new Texture2D(width, height);
        tex.ReadPixels(new Rect(0, 0, width, height), 0, 0);
        tex.Apply();

        yield return tex;
        string path = SaveImageToGallery(tex, "Name", "Description");
        Debug.Log("Picture has been saved at:\n" + path);
    }

    protected static string SaveImageToGallery(Texture2D a_Texture, string a_Title, string a_Description)
    {
        using (AndroidJavaClass mediaClass = new AndroidJavaClass(MEDIA_STORE_IMAGE_MEDIA))
        {
            using (AndroidJavaObject contentResolver = Activity.Call<AndroidJavaObject>("getContentResolver"))
            {
                AndroidJavaObject image = Texture2DToAndroidBitmap(a_Texture);
                return mediaClass.CallStatic<string>("insertImage", contentResolver, image, a_Title, a_Description);
            }
        }
    }

    protected static AndroidJavaObject Texture2DToAndroidBitmap(Texture2D a_Texture)
    {
        byte[] encodedTexture = a_Texture.EncodeToPNG();
        using (AndroidJavaClass bitmapFactory = new AndroidJavaClass("android.graphics.BitmapFactory"))
        {
            return bitmapFactory.CallStatic<AndroidJavaObject>("decodeByteArray", encodedTexture, 0, encodedTexture.Length);
        }
    }

    protected static AndroidJavaObject Activity
    {
        get
        {
            if (m_Activity == null)
            {
                AndroidJavaClass unityPlayer = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
                m_Activity = unityPlayer.GetStatic<AndroidJavaObject>("currentActivity");
            }
            return m_Activity;
        }
    }

}

你可能想看看,或者我试过了,现在它在android中不起作用,即使你使用的是android API 29 use fix。我今天也有同样的问题,与yasirkula/UnityNativeGallery合作得很好!我无法更改我的android清单。它因错误而失败
public void TakeAShot()
{
    StartCoroutine(TakeScreenshotAndSave());
}

private IEnumerator TakeScreenshotAndSave()
{
    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();

    // Save the screenshot to Gallery/Photos
    Debug.Log("Permission result: " + NativeGallery.SaveImageToGallery(ss, "GalleryTest", "Image.png"));

    // To avoid memory leaks
    Destroy(ss);
}