在Unity中使用资源文件夹
我正在开发一个需要引用.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运行时不会加载任何东西。
您无法使用StreamReader
或File
类读取Resources目录。 您必须使用Resources.Load
。
1。路径是相对于您的项目的资产文件夹内的任何资源文件夹。
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;
精灵 – 单人 :
纹理类型设置为Sprite(2D和UI)和
Sprite模式设置为Single的图像 。
Sprite sprite = Resources.Load("spriteFile", typeof(Sprite)) as Sprite;
精灵 – 多重 :
纹理类型设置为Sprite(2D和UI)和
Sprite模式设置为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网格(如FBX文件)
Mesh model = Resources.Load("yourModelFileName", typeof(Mesh)) as Mesh;
3D网格(来自GameObject预制)
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;
访问子文件夹中的文件 :
例如,如果在位于Resources文件夹中的名为“ Sound ”的子文件夹中有一个shoot.mp3文件,则可以使用正斜杠:
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());