c# - 如何统一更新运行时的图像?
问题描述
我正在构建从关卡场景到菜单场景的平滑过渡。这个想法是在下一个场景(菜单)加载之前制作关卡的屏幕截图。然后截取这个覆盖整个屏幕并淡出以显示菜单的屏幕截图。
在关卡结束时,我会截屏。
ScreenCapture.CaptureScreenshot("Resources/DestroyedBoss.png");
当我加载下一个场景时,这个屏幕截图应该加载并覆盖整个场景。
public Texture2D myTexture;
void Start()
{
// load texture from resource folder
myTexture = Resources.Load("DestroyedBoss") as Texture2D;
GameObject rawImage = GameObject.Find("RawImage");
rawImage.GetComponent<RawImage>().texture = myTexture;
}
屏幕截图会褪色,包含它的对象将被销毁。
public RawImage imageToFade;
void Update()
{
imageToFade.color -= new Color(0, 0, 0, 0.2f * Time.deltaTime);
if (imageToFade.color.a < 0.1)
Destroy(this.gameObject);
}
这一切都很好,除了加载屏幕截图本身。
似乎unity在运行游戏时不会更新图像。并且总是使用我上次运行游戏时的屏幕截图。
我已经搜索/谷歌搜索并尝试了 2 天,但我很茫然。
我怎样才能使这项工作?有没有办法在运行我的游戏时更新 png 文件?也许为屏幕截图创建一个临时容器并将其设置为 RawImage?
解决方案
就像 derHugo 评论的那样。您可以使用 Application.persistentDataPath 来保存您的图像。
ScreenCapture.CaptureScreenshot(Application.persistentDataPath+"DestroyedBoss.png");
要加载图像,您可以使用 UnityWebRequestTexture.GetTexture。
IEnumerator SetImage()
{
yield return new WaitForSeconds(1);
using (UnityWebRequest uwr =
UnityWebRequestTexture.GetTexture(Application.persistentDataPath + "DestroyedBoss.png"))
{
yield return uwr.SendWebRequest();
if (uwr.isNetworkError || uwr.isHttpError)
{
Debug.Log(uwr.error);
}
else
{
// Get downloaded asset bundle
myTexture = DownloadHandlerTexture.GetContent(uwr);
GameObject rawImage = GameObject.Find("RawImage");
rawImage.GetComponent<RawImage>().texture = myTexture;
FadeOut.instance.StartFade();
}
}
}
它工作正常,但屏幕截图需要几秒钟才能出现在文件夹中。所以对我来说......它效果不佳。我将使用另一种技术。而不是在加载菜单时淡化屏幕截图。我将停止游戏,(Time.timescale = 0)并淡入菜单截图,然后加载实际的菜单场景。
再次感谢 derHugo。
推荐阅读
- kotlin - 我可以在 Koltin Multiplatform 项目中使用 Spock 测试吗?如果是这样,如何在 gradle.build.kts 中设置?
- oracle - 带有 Db 链接的合并语句不起作用
- node.js - Nodejs - 将指挥官参数传递给永远监控子进程
- python - python问题:sqlite3.ProgrammingError:无法对关闭的游标进行操作
- c - 18446744073709551615ull 的异常行为
- python - Keras 自定义遮罩层
- python - 'hskip' 未被识别为内部或外部命令,
- html - 微调器显示在模式的中心而不是网页
- java - java错误:构造函数已在类中定义-使用lombok
- python - 有没有办法打开一个不会暂停程序其余部分的外部 .exe?Python