【问题标题】:How to Transfer an image from one scene to another如何将图像从一个场景传输到另一个场景
【发布时间】:2020-01-28 10:08:44
【问题描述】:

我正在尝试截取一个对象的屏幕截图,然后在统一的订单(另一个场景)中将其显示为预览。

我已使用原生图库资产将屏幕截图保存到图库。但我不确定如何在下一个场景中显示图像。

有没有办法做到这一点?或者也许将图像发送到下一个场景?

更新:

我尝试将 DontDestroyOnLoad 脚本添加到与截图相关的游戏对象中,但截图未在第二个场景中显示。这是我的代码

void Start()
{
    DontDestroyOnLoad(transform.gameObject);

}

我从场景更改脚本中调用了以下函数

void Start()
{
    GameObject thePlayer = GameObject.Find("screenshotGameObject");
    TakeScreenshot playerScript = thePlayer.GetComponent<TakeScreenshot>();
    Screenshot = playerScript.ss;
}

我用来截图的脚本

public class TakeScreenshot : MonoBehaviour {

    [SerializeField]
    public Text debugText;
    public GameObject ScreenshotImage;


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

    public void TakeAShot()
    {
        StartCoroutine(TakeScreenshotAndSave());
    }


    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();
        NativeGallery.Permission permission = NativeGallery.CheckPermission();
        NativeGallery.RequestPermission();
        if (permission == NativeGallery.Permission.Denied)
        {
            NativeGallery.OpenSettings();
        }

        else if(permission == NativeGallery.Permission.Granted)
        {
            // Save the screenshot to Gallery/Photos
            Debug.Log("Permission result: " + NativeGallery.SaveImageToGallery(ss, "Boflora", "Image.png"));

            //debugText.text = "Permission result: " + NativeGallery.SaveImageToGallery(ss, "GalleryTest", "Image.png");
            // To avoid memory leaks
            //Destroy(ss);

        }

        StartCoroutine(ShowAndHide(1.0f)); // 1 second

    }
    IEnumerator ShowAndHide(float delay)
    {
        ScreenshotImage.SetActive(true);
        yield return new WaitForSeconds(delay);
        ScreenshotImage.SetActive(false);
    }
}

【问题讨论】:

  • 有很多方法可以为下一个场景发送/保留一个对象,你尝试了什么,你做了什么,你看了什么并忽略了......
  • 我不知道有什么方法可以传输图片或从图库中访问它。我不是在谈论对象,而是在场景中动态拍摄的屏幕截图。请帮忙
  • 好吧,一切都是对象,在 c# 中,因此在统一中,因此可以应用在场景之间传输任何内容的方式
  • 第一个问题你是怎么说截图的?据我所知,到目前为止我所看到的应该是渲染纹理,如果是这种情况,您可以将相同的渲染测试分配给 scean#2 的任何脚本,并且您可以使用它。
  • @BugFinder,我尝试了这种方法并更新了问题,但仍然无法正常工作

标签: c# unity3d


【解决方案1】:

尝试将图像保存在脚本中并将该脚本放在游戏对象上并使用加载时不破坏功能。您可以在下一个场景中使用您的图像

【讨论】:

  • 嗨,我试过这样做,但不知何故,第二个场景中的图片不可用,你能检查一下我做错了什么吗?
  • 您好,能否请您确认一下您是将画布中的屏幕截图用作游戏对象还是资产中的纹理?
  • 我正在使用脚本捕获屏幕截图,该脚本嵌入到场景中的游戏对象中
  • 我认为问题在于我在脚本中捕获了 2D 纹理,并试图在下一个场景中将图像放入画布中
  • 你的场景可以有两种方法: 1.你可以在截图的时候将截图保存在你的asset/resources文件夹中,这样它就可以在整个游戏的任何地方使用(按名称)(然后您可以通过 resources.load() 方法获取该屏幕截图) 2. 其次,无论何时拍摄屏幕截图,您都可以将该 ss 传递到场景中的另一个脚本中,例如“屏幕截图持有者”,它将您的屏幕截图保存在一个数组中或精灵或纹理等类型的游戏对象,您可以通过加载时不破坏的方法简单地将“屏幕截图持有者”游戏对象放在另一个场景中。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-07-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-24
相关资源
最近更新 更多