为啥使用 System.IO 截屏不起作用?
Posted
技术标签:
【中文标题】为啥使用 System.IO 截屏不起作用?【英文标题】:Why taking screenshot with System.IO doesn't work?为什么使用 System.IO 截屏不起作用? 【发布时间】:2020-09-09 19:13:29 【问题描述】:我已经添加到我的游戏截图功能。在 Xcode 中构建它,但出现““FileNotFoundException:找不到文件”错误。为什么?
private IEnumerator TakeScreenshot()
string imageName = "LevelFinished" + current_level.ToString() + ".png";
ScreenCapture.CaptureScreenshot(Application.persistentDataPath + "/" + imageName);
yield return new WaitForSeconds(0.3f);
byte[] data = File.ReadAllBytes(Application.persistentDataPath + "/" + imageName);
Texture2D screenshotTexture = new Texture2D(Screen.width, Screen.height);
screenshotTexture.LoadImage(data);
Sprite screenshotSprite = Sprite.Create(screenshotTexture, new Rect(0, 0, Screen.width, Screen.height), new Vector2(0.5f, 0.5f));
UI_Image_final.transform.GetChild(0).GetComponent<Image>().sprite = screenshotSprite;
【问题讨论】:
【参考方案1】:来自docs:
包含持久数据目录的路径(只读)。
如果这是正确的,则意味着您的屏幕截图无法存储在那里,因此如果您检查您的 persistentDataPath 目录,您将找不到图片。尝试删除加载纹理的部分代码,然后尝试存储它,然后检查文件是否存在。
存储此类内容的一种方法是使用文件夹StreamingAssets 来存储屏幕截图。我知道,文档说:
在许多平台上,流资产文件夹位置是只读的
但是我已经做了一个测试,至少对于 Windows 和 android,它可以让你从那个文件夹中读写。
【讨论】:
【参考方案2】:解决方案很简单:在 ScreenCapture.CaptureScreenshot 的 docs 中,我错过了“在移动平台上,文件名附加到持久数据路径”部分。这意味着,我保存屏幕截图的路径不正确;因此我只需要更改一行:
//ScreenCapture.CaptureScreenshot(Application.persistentDataPath + "/" + imageName);
//Change for:
ScreenCapture.CaptureScreenshot(imageName);
【讨论】:
以上是关于为啥使用 System.IO 截屏不起作用?的主要内容,如果未能解决你的问题,请参考以下文章
为啥 pull-right 类在 bootstrap 版本 4.1.0 上不起作用? [复制]
为啥外部链接在构建后在 phonegap 应用程序上不起作用
为啥 ngfor 指令不起作用,尽管我在 Typescript 类中创建了正确的对象