繁体   English   中英

构建后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文件夹在Re​​sources文件夹中。

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

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

在此先感谢您的帮助。

在运行时加载 PNG 文件的可选方法。 您可以在开发过程中将Case2留在 Asset 文件夹中。 为 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;

除了 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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM