构建后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
我有许多图像集 (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