c# - 构建后Unity3D加载资源

标签 c# image unity3d resources load

我有许多图像集 (PNG),它们放置在项目 Assets 的 Resources 文件夹内的不同子文件夹中。在编辑器上工作时,我可以毫无问题地从不同的子文件夹加载图像,只需简单地使用 Resources.Load() 命令并提供我指定的特定图像的路径m 尝试加载,例如:

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 中子文件夹的存在有关,因为构建中不存在为 Resources.Load() 函数提供的用于加载图像的路径。

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

在此先感谢您的帮助。

最佳答案

可选 在运行时加载 PNG 文件的方法。 您可以在开发期间将 Case2 保留在 Assets 文件夹中。 为 Windows 构建后,转到 exe 构建文件所在的文件夹。假设它名为 Game.exe。在 Game.exe 可执行文件所在的同一目录中将有一个名为 Game_Data 的文件夹。

复制Case2文件夹到Game_Data文件夹。

它现在应该是这样的.... Game_Data/Cas​​e2/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;

关于c# - 构建后Unity3D加载资源,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36016350/

相关文章:

c# - 反序列化 Json 对象时出现 "because the type requires a JSON array (e.g. [1,2,3]) to deserialize correctly"错误

c# - 使用字符串访问属性

c# - 将范围转换为矩形

html - 强制响应式 <img> 扩展到父级 <div>

javascript - 在 jquery 中使用 img 添加和关闭 anchor 标记之前

android - 适用于 Unity Android 的 PubNub GCM

c# - WPF内存问题

wpf - 在 WPF 中裁剪图像

android - 什么是UnityPlayerActivity、UnityPlayerNativeActivity、UnityPlayerProxyActivity?

c# - 从没有堆分配的列表中获取数组