我有很多图像集(PNG),它们放在项目资产的Resources
文件夹内的不同子文件夹中。在编辑器上工作时,我可以毫无问题地加载来自不同子文件夹的图像,只需使用Resources.Load()
命令并提供我尝试的特定图像的路径即可。加载,例如:
firstLeftCC = Resources.Load("Case2/Left/CC/IMG-0004-00001", typeof(Texture2D)) as Texture2D;
在此示例中,图像" IMG-0004-00001"放在CC文件夹中,CC文件夹在Left文件夹内,Left文件夹在Case2文件夹内,最后Case2文件夹在Resources文件夹中。
但是在构建项目之后,对于Windows应用程序,当我运行.exe
文件时,它不会加载任何这些图像。经过一些研究,似乎问题与资源中子文件夹的存在有关,因为在构建中,加载图像的Resources.Load()函数的路径不存在。
我想知道是否有人知道这个问题的解决方案,或者是否可以从给定文件夹加载图像而不是尝试从Resources文件夹加载它们。
提前感谢您的帮助。
答案 0 :(得分:1)
在运行时加载PNG文件的可选方法。 您可以在开发期间将 Case2 保留在资源文件夹中。 为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为资产目录中的每个文件/文件夹创建.meta 文件/文件夹。当您复制目录时, IMG-0004-00001.PNG 将有另一个名为 IMG-0004-00001.PNG.meta 的文件。您应该在开发期间不要将 Case2 文件夹放在Assets文件夹中,否则您必须自己删除。
加入using System.IO;
答案 1 :(得分:1)
除了Resources.Load,您还可以使用WWW类从给定文件夹加载图像。为此,URL必须使用file://协议,并根据您的操作系统包含文件的路径。
http://docs.unity3d.com/ScriptReference/WWW.html
http://answers.unity3d.com/questions/517414/how-to-use-www-to-load-local-files.html