在Unity中使用资源文件夹

时间:2016-12-26 03:46:52

标签: c# unity3d resources assets hololens

我正在开发一个需要引用.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运行时没有加载任何东西。

2 个答案:

答案 0 :(得分:25)

您无法使用StreamReaderFile类阅读Resources目录。您必须使用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;

精灵 - 单身

纹理类型设置为精灵(2D和UI)

的图像

Sprite Mode 设置为 Single 的图像。

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

精灵 - 多个

纹理类型设置为精灵(2D和UI)

的图像

精灵模式设置为多个的图像。

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

视频文件(Unity&gt; = 5.6)

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

GameObject Prefab

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

3D网格(例如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)

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 ”的子文件夹中,该文件放在资源中文件夹,你使用正斜杠:

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

答案 1 :(得分:1)

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

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 可以打印文本文件中所有可用的数据