Unity3D编译后如何加载资源

3
我有很多组图像(PNG),它们位于项目资源的不同子文件夹中。在编辑器中工作时,我可以轻松从不同的子文件夹加载这些图像,只需使用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文件夹内存在子文件夹有关,因为给定给Resources.Load()函数以加载图像的路径在构建中不存在。
我想知道是否有人知道此问题的解决方法,或者是否可以从给定的文件夹加载图像,而不是尝试从Resources文件夹加载它们。
感谢您提前的帮助。

你把图片保存在哪个文件夹里了?请更新你的问题并注明该问题所在的位置。"Case2"文件夹在哪里?它在你的编辑器中的位置是什么?这将有助于其他人回答你的问题。 - Programmer
图片位于项目的Assets文件夹中的Resources文件夹内部的子文件夹中。在给定的示例中,图像IMG-004-0001位于CC文件夹内,该文件夹位于Left文件夹内,以此类推,并且Case2文件夹位于Resources文件夹内。 - JoaoM
Case2位于Resources文件夹内,该文件夹位于Assets文件夹中。因此它的路径类似于:Assets - Resources - Case2 - Left - CC - IMG-0004-00001.png。 - JoaoM
我明白了。我认为你的代码没有问题。我正在想出另一种方法来解决这个问题,但那些图片必须在 Resources 文件夹之外。这是在 Windows 上吗? - Programmer
是的,它在Windows上。 - JoaoM
显示剩余4条评论
2个回答

1

可选的方法,在运行时加载PNG文件。在开发过程中,您可以将Case2放在Asset文件夹中。在构建Windows后,转到exe构建文件所在的文件夹。假设它被称为Game.exe。在同一目录下会有一个名为Game_Data的文件夹,其中包含Game.exe可执行文件。

复制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;

1

是的,他可以使用WWW类,但问题在于它需要协程并且他必须等待isDone。使用System.IO.File会更快。因此,如果他的程序流程不包括协程,那么他上面发布的代码将很难将他的Resources.Load函数代码转换为协程代码。 - Programmer

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接