构建后Unity3D加载资源

时间:2016-03-15 16:02:55

标签: c# image unity3d resources load

我有很多图像集(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文件夹在Re​​sources文件夹中。

但是在构建项目之后,对于Windows应用程序,当我运行.exe文件时,它不会加载任何这些图像。经过一些研究,似乎问题与资源中子文件夹的存在有关,因为在构建中,加载图像的Resources.Load()函数的路径不存在。

我想知道是否有人知道这个问题的解决方案,或者是否可以从给定文件夹加载图像而不是尝试从Resources文件夹加载它们。

提前感谢您的帮助。

2 个答案:

答案 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