【问题标题】:Unity3D - taking a screenshot of prefabUnity3D - 截取预制件的屏幕截图
【发布时间】:2017-03-16 05:28:19
【问题描述】:

我才刚刚开始学习 C# 和 Unity,但我正在尝试获取预制件的图像,以便可以在游戏的其他地方使用它。

我遇到了代码here,但说实话我不明白如何使用它。

我有我的预制件,我在上面添加了一个画布,然后将代码应用到预制件,但是我该如何让它真正运行呢?

我本来想对原帖发表评论,但我还不能发表评论。

【问题讨论】:

  • 我不确定你在问什么...你为什么要截图?你打算怎么做?(你应该能够评论你自己的问题)
  • 我已经说了原因,因为我需要图像在其他地方使用。
  • 好吧,您确实说过,但是您到底要使用屏幕截图做什么?您是在制作 2D 游戏并且只需要一个 2D 元素的副本,还是需要一个实际的屏幕转储?
  • 用户将预制件放在他们想要的位置,所以我需要预制件的可视化表示,即单元的图像,以便他们真正知道他们在选择什么。

标签: c# unity3d


【解决方案1】:

它看起来像您提供的链接上的代码,正在设置 void Start() 中的所有内容。因此,当您在 Unity 中按下 play 时,它将运行 start 方法中的代码,从而有效地拍照。您需要确保添加CanvasScreenShot.cs 的对象的名称是“GameObject”。在test.cs 的第 10 行,他试图找到一个名为“GameObject”的 GameObject。或者在第 10 行,您可以将其更改为您的游戏对象的名称。同样在

void receivePNGScreenShot(byte[] pngArray)
{
    Debug.Log("Picture taken");

    //Do Something With the Image (Save)
    string path = Application.persistentDataPath + "/CanvasScreenShot.png";
    System.IO.File.WriteAllBytes(path, pngArray);
    Debug.Log(path);
}

test.cs您可能会发现更改path 值、喜欢您的桌面或其他东西或在您的统一文件夹中更容易。您是否在控制台中收到任何错误?随时发表评论,我会尽力为您提供帮助。

【讨论】:

  • 嗯,它没有像我预期的那样工作。我将名称更改为 GameObject 并拍摄图像,但我得到的只是我自己可以通过截图完成的事情。我希望有一个透明的背景,但它只是用默认的棕色截取图像/灰色背景
  • 好的,所以在CanvasScreenShot.cs 中向下滚动到第 110 行,这是他设置要拍摄的图像大小的地方。看看它在哪里说Texture2d screenImage = new Texture2D(Screen.width, Screen.height); 这是抓取整个屏幕,将其更改为画布上对象的大小(您要拍照的对象)。然后在第 114 行将 Screen.width, Screen.height 更改为对象在画布上的位置。这将需要一些试验和错误。查看ReadPixels
  • 我可能找到了使背景透明的东西。我明天去看看。
【解决方案2】:

一种方法是使用相机来实现这一点。您可以四处移动相机,并更改相机上的剔除蒙版以决定渲染的内容,这样您就可以对其进行调整,使其仅渲染场景中您想要的对象。

要显示该图像,您可以使用渲染纹理来获得不断更新的纹理。但是,如果您需要获取单个图像,则必须编写一些代码,而我不确定最好的方法是什么。

至于获取 PNG 或任何图像,我不知道该怎么做,但是您链接的代码看起来对如何使用它有很好的解释。 我仍然不太清楚为什么你会想要一个 PNG,除非你希望用户在运行后有一个保存的图像。

【讨论】:

    猜你喜欢
    • 2021-11-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-26
    • 2012-03-10
    • 2021-07-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多