构建后Unity3D加载资源

Unity3D loading resources after build

我有许多图像集 (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文件夹在资源文件夹。

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

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

在此先感谢您的帮助。

在 运行 时间内加载 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为每个file/folder[=创建.meta file/folder 47=] 在 Assets 目录中。当您复制目录时,IMG-0004-00001.PNG 将有另一个名为 IMG-0004-00001.PNG.meta[=47 的文件=].在开发过程中,您不应该将 Case2 文件夹放在 Assets 文件夹中,否则您将不得不自己 删除 这些文件夹。

包括using System.IO;

作为 Resources.Load 的替代方法,您可以使用 WWW class 从给定文件夹加载图像。为此,URL 必须使用 file:// 协议并根据您的 OS.

包含文件路径

http://docs.unity3d.com/ScriptReference/WWW.html

http://answers.unity3d.com/questions/517414/how-to-use-www-to-load-local-files.html