首页 文章

在Unity中使用资源文件夹

提问于
浏览
7

我正在开发一个需要引用.txt文件的HoloLens项目 . 我将这些文件存储在Unity的“Resources”文件夹中,并让它们完美地运行(通过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运行时没有加载任何东西 .

1 回答

  • 22

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

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

    2 .Do not 在路径参数中包含文件扩展名,例如.txt,.png,.mp3 .

    3 . 当Resources文件夹中有另一个文件夹时,使用正斜杠而不是反斜杠 . 反斜杠不起作用 .

    Text files

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

    支持的TextAsset格式:

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

    Sound files

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

    Image files

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

    Sprites - Single

    纹理类型的图像设置为Sprite(2D和UI)和

    Sprite Mode设置为Single的图像 .

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

    Sprites - Multiple

    纹理类型的图像设置为Sprite(2D和UI)和

    Sprite Mode设置为Multiple的图像 .

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

    Video files (Unity >= 5.6)

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

    GameObject Prefab

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

    3D Mesh (such as FBX files)

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

    3D Mesh (from GameObject Prefab)

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

    3D Model (as GameObject)

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

    Accessing files in a sub-folder

    例如,如果您有一个名为“Sound”的子文件夹中的shoot.mp3文件放在Resources文件夹中,则使用正斜杠:

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

    Asynchronous Loading

    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());

相关问题