2016-03-15 42 views
2

我有许多组图像(PNG)放置在项目资产的Resources文件夹中的不同子文件夹中。在编辑器上工作时,我可以通过简单地使用Resources.Load()命令并提供指向我试图加载的特定映像的路径来加载不同子文件夹中的映像,例如:Unity3D在构建之后加载资源

firstLeftCC = Resources.Load("Case2/Left/CC/IMG-0004-00001", typeof(Texture2D)) as Texture2D; 

在此示例中,图像“IMG-0004-00001”放置在CC文件夹中,CC文件夹位于左文件夹内,左文件夹位于Case2文件夹内,最后Case2文件夹位于资源文件夹。

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

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

在此先感谢您的帮助。

+0

什么是你在保存图像文件夹?更新与问题所在的问题。 “Case2”文件夹在哪里?它在你的编辑器中。这将帮助人们回答你的问题。 – Programmer

+0

图像位于Resources文件夹内的子文件夹中,该文件夹位于项目的Assets文件夹中。在给出的示例中,图像IMG-004-0001位于左文件夹内的CC文件夹内,依此类推,Case2文件夹位于资源内。 – JoaoM

+0

Case2在Assests文件夹中,其他文件夹在Case2中? – Programmer

回答

1

可选在运行时加载PNG文件的方法。 您可以在开发期间将Case2保留在资产文件夹中。 之后你为Windows建立,去文件夹exe建的文件是。我们假设它叫Game.exe。将会有一个文件夹叫做Game_Data在同一目录中的Game.exe可执行文件是。

复制情况2文件夹到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文件夹放置在资产文件夹中,否则您将不得不删除这些您自己。

包括using System.IO;

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

+0

是的,他可以与WWW课程,但问题是它需要协同程序,他也必须等待isDone。使用System.IO.File更快。所以他上面发布的代码,如果他的程序流不包括协程,那么将他的Resources.Load函数代码转换为协程代码是很难的。 – Programmer