2016-03-15 93 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