2016-12-26 109 views
3

我正在开发一个需要引用.txt文件的HoloLens项目。我有存储在统一的“资源”文件夹中的文件,并让他们的工作完全正常(当通过统一运行):在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)); 
} 

字符串 '海峡' 是有效的;它在Unity中工作得非常好。然而,再次,它通过HoloLens运行时不会加载任何东西。

回答

14

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

。该路径相对于项目的Assets文件夹内的任何Resources文件夹。

。做包括文件扩展名,如.TXTpng格式.MP3在路径参数。

。用斜线回,而不是当你有资源内的另一个文件夹文件夹斜杠。反斜杠将不起作用。

文本文件

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 sprite = Resources.Load("spriteFile", typeof(Sprite)) as Sprite; 

精灵 - 多个

图像的纹理类型集到精灵(2D和UI)

图像的精灵模式集到

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

视频文件(统一> = 5.6)

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

游戏物体预制

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

三维网格(如FBX文件)

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

三维网格(从游戏物体预制)

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; 

访问中的子文件夹文件:

对于例如,如果你有拍摄。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());

+0

我明白了,这是有道理的。然后我的下一部分就是我也有图像和声音文件(在资源中),我使用resources.load来检索。那些在Unity中工作,但不在我部署到HoloLens时。 – whycodingsohard

+1

*我已经回答了关于资源文件夹的许多问题,并且几个小时前回答了这些问题,其中大多数问题与标题或说明中的问题相同,但问题不同。我已决定将解决方案涵盖大部分这些问题和文件类型,以防止在将来提供重复的答案。*检查我的编辑并让我知道你是否有问题。 – Programmer

+1

这是我一直在寻找的资源的实用和完整的参考资料:-) – Bijan