【问题标题】:Using Resources Folder in Unity在 Unity 中使用资源文件夹
【发布时间】:2016-12-26 03:46:52
【问题描述】:

我正在开发一个需要引用 .txt 文件的 HoloLens 项目。我将文件存储在 Unity 的“资源”文件夹中,并且它们工作得非常好(通过 Unity 运行时):

string basePath = Application.dataPath;
string metadataPath = String.Format(@"\Resources\...\metadata.txt", list);

// If metadata exists, set title and introduction strings.
if (File.Exists(basePath + metadataPath))
{
      using (StreamReader sr = new StreamReader(new FileStream(basePath + metadataPath, FileMode.Open)))
    {
         ...
    }
}

但是,在为 HoloLens 部署构建程序时,我能够运行代码,但它不起作用。没有显示任何资源,并且在检查 HoloLens Visual Studio 解决方案(通过在 Unity 中选择构建创建)时,我什至看不到资源或资产文件夹。我想知道我是否做错了什么,或者是否有特殊的方法来处理这些资源。

还有图像和声音文件...

foreach (string str in im)
{
      spriteList.Add(Resources.Load<Sprite>(str));
}

字符串'str'有效;它在 Unity 上工作得非常好。但是,再次运行 HoloLens 时,它不会加载任何内容。

【问题讨论】:

    标签: c# unity3d resources assets hololens


    【解决方案1】:

    您无法使用StreamReaderFile 类读取资源目录。您必须使用Resources.Load

    1。路径相对于您项目的 Assets 文件夹中的任何 Resources 文件夹。

    2.包括.txt.png等文件扩展名>.mp3 在路径参数中。

    3。如果 Resources 文件夹中有另一个文件夹,请使用正斜杠而不是反斜杠。反斜杠不起作用。

    文本文件

    TextAsset txtAsset = (TextAsset)Resources.Load("textfile", typeof(TextAsset));
    string tileFile = txtAsset.text;
    

    支持的TextAsset 格式:

    txt .html .htm .xml .bytes .json .csv .yaml .fnt

    声音文件

    AudioClip audio = Resources.Load("soundFile", typeof(AudioClip)) as AudioClip;
    

    图像文件

    Texture2D texture = Resources.Load("textureFile", typeof(Texture2D)) as Texture2D;
    

    精灵 - 单人

    Texture Type 设置为 Sprite(2D 和 UI)的图像

    Sprite Mode 设置为 Single 的图像。

    Sprite sprite = Resources.Load("spriteFile", typeof(Sprite)) as Sprite;
    

    精灵 - 多个

    Texture Type 设置为 Sprite(2D 和 UI)的图像

    Sprite Mode 设置为 Multiple 的图像。

    Sprite[] sprite = Resources.LoadAll<Sprite>("spriteFile") as Sprite[];
    

    视频文件(Unity >= 5.6)

    VideoClip video = Resources.Load("videoFile", typeof(VideoClip)) as VideoClip;
    

    游戏对象预制件

    GameObject prefab = Resources.Load("shipPrefab", typeof(GameObject)) as GameObject;
    

    3D Mesh(如 FBX 文件)

    Mesh model = Resources.Load("yourModelFileName", typeof(Mesh)) as Mesh;
    

    3D Mesh(来自 GameObject Prefab)

    MeshFilter modelFromGameObject = Resources.Load("yourGameObject", typeof(MeshFilter)) as MeshFilter;
    Mesh loadedMesh = modelFromGameObject.sharedMesh; //Or   design.mesh
    

    3D 模型(作为游戏对象)

    GameObject loadedObj = Resources.Load("yourGameObject") as GameObject;
    //MeshFilter meshFilter = loadedObj.GetComponent<MeshFilter>();
    //Mesh loadedMesh = meshFilter.sharedMesh;
    
    GameObject object1 = Instantiate(loadedObj) as GameObject;
    

    访问子文件夹中的文件

    例如,如果您有一个 shoot.mp3 文件,该文件位于名为“Sound”的子文件夹中,该子文件夹位于 Resources em> 文件夹,您使用正斜杠:

    AudioClip audio = Resources.Load("Sound/shoot", typeof(AudioClip)) as AudioClip;
    

    异步加载

    IEnumerator loadFromResourcesFolder()
    {
        //Request data to be loaded
        ResourceRequest loadAsync = Resources.LoadAsync("shipPrefab", typeof(GameObject));
    
        //Wait till we are done loading
        while (!loadAsync.isDone)
        {
            Debug.Log("Load Progress: " + loadAsync.progress);
            yield return null;
        }
    
        //Get the loaded data
        GameObject prefab = loadAsync.asset as GameObject;
    }
    

    使用StartCoroutine(loadFromResourcesFolder());

    【讨论】:

    • 我明白了,这是有道理的。然后我的下一部分将是我还有图像和声音文件(在资源中),我正在使用 resources.load 来检索它们。这些在 Unity 中有效,但在我部署到 HoloLens 时也无效。
    • 几个小时前,我已经回答了很多关于 Resources 文件夹的问题,其中大多数问题的答案相同,但标题或描述中的问题不同。我决定整理一个解决方案,涵盖大部分此类问题和文件类型,以防止将来提供重复的答案。检查我的编辑,如果您有任何问题,请告诉我。
    • 这是我一直在寻找的资源的实用且完整的参考:-)
    【解决方案2】:

    如果你想从资源中加载文本文件,请不要指定文件扩展名 只需按照下面给定的代码即可

    private void Start()
    {
        TextAsset t = Resources.Load<TextAsset>("textFileName");
        List<string> lines = new List<string>(t.text.Split('\n'));
        foreach (string line in lines)
        {
            Debug.Log(line);
        }
    }
    

    debug.Log可以打印文本文件中所有可用的数据

    【讨论】:

      【解决方案3】:

      您可以尝试将文本文件存储在 streamingsasset 文件夹中。它在我的项目中运行良好

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多