我有许多图像集 (PNG),它们放置在项目 Assets 的 Resources
文件夹内的不同子文件夹中。在编辑器上工作时,我可以毫无问题地从不同的子文件夹加载图像,只需简单地使用 Resources.Load()
命令并提供我指定的特定图像的路径m 尝试加载,例如:
firstLeftCC = Resources.Load("Case2/Left/CC/IMG-0004-00001", typeof(Texture2D)) as Texture2D;
本例中图片“IMG-0004-00001”放在CC文件夹中,CC文件夹在Left文件夹中,Left文件夹在Case2文件夹中,最后Case2文件夹在资源文件夹。
但是在构建项目之后,对于 Windows 应用程序,当我运行 .exe
文件时,它不会加载任何这些图像。经过一些研究,问题似乎与 Resources 中子文件夹的存在有关,因为构建中不存在为 Resources.Load() 函数提供的用于加载图像的路径。
我想知道是否有人知道这个问题的解决方案,或者是否可以从给定文件夹加载图像而不是尝试从 Resources 文件夹加载它们。
在此先感谢您的帮助。
最佳答案
可选 在运行时加载 PNG 文件的方法。 您可以在开发期间将 Case2 保留在 Assets 文件夹中。 在为 Windows 构建后,转到 exe 构建文件所在的文件夹。假设它名为 Game.exe。在 Game.exe 可执行文件所在的同一目录中将有一个名为 Game_Data 的文件夹。
复制Case2文件夹到Game_Data文件夹。
它现在应该是这样的.... Game_Data/Case2/Left/CC/IMG-0004-00001.PNG
现在使用下面的代码,您可以使用下面的代码轻松阅读您的png文件:
Texture2D firstLeftCC = null;
byte[] imageBytes;
string imagePath = Application.dataPath + "/Case2/Left/CC/IMG-0004-00001.PNG";
if (File.Exists(imagePath))
{
Debug.Log("Exist");
imageBytes = File.ReadAllBytes(imagePath);
firstLeftCC = new Texture2D(10, 10);
firstLeftCC.LoadImage(imageBytes);
}
现在您可以自由地将 firstLeftCC 用作 Texture2D
注意:Unity 为Assets 目录中的每个文件/文件夹 创建.meta 文件/文件夹。当您复制目录时,IMG-0004-00001.PNG 将有另一个名为 IMG-0004-00001.PNG.meta 的文件。在开发过程中,您不应将 Case2 文件夹放在 Assets 文件夹中,否则您将不得不自行删除这些文件夹。
包括 using System.IO;
关于c# - 构建后Unity3D加载资源,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36016350/