在本文,你将学到如何使用SysTem.IO访问Editor模式下Assets中的资源,并且知道该路径在编译后的变化。
下面代码实现访问预制物并返回预制物名称的数组
prefabPath= Application.dataPath + "/Resources/Prefab";
rootExpPath = Application.dataPath + "/Resources/Emoj";
modelName = Directory.GetFiles(prefabPath, "*.prefab"); //------CodeForDebug----
foreach (var item in modelName)
{
Debug.Log(item); //返回的是文件全路径,且最后文件名被反斜杠隔开,形如:D:/Work/Game/New Unity Project/Assets/Resources/Prefab\cake2.prefab;
}
DirectoryInfo _fileInfo = new DirectoryInfo(prefabPath); //------------------↓↓↓↓↓↓获取已知模型的名称信息,方便表情文件夹的动态确认和生成
FileInfo[] ff = _fileInfo.GetFiles("*.prefab");
int count = ff.Length;
modelName = new string[count];
for (int i = 0; i < count; i++)
{
modelName[i] = ff[i].Name.Substring(0, ff[i].Name.Length - 7);
} //--------------------↑↑↑↑↑↑
使用System.IO方式访问Resouse中预制资源或者预制物并不理想,Unity Editor模式下OK,打包后Application.DataPath
访问的地址会存在偏差(如图所示);
所以,如果获取Resouce文件夹下所有预制物的名称,还是建议用:
public string[] modelNames;
private GameObject [] modelList;
void Start () {
modelList = Resources.LoadAll<GameObject>("Prefab");
if (modelList!=null&&modelList.Length>0)
{
modelNames = new string[modelList.Length];
for (int i = 0; i < modelList.Length; i++)
{
modelNames[i] = modelList[i].name;
}
}
}
关键API就是Resouce.LoadAll()
+遍历赋值modelList[i].name
简单实用;
但是System.IO还是有大用处的,譬如游戏打包OK后,依旧可以访问外部配置文件(XML或Json)甚或是其他需要后期迭代的游戏资源,譬如:Texture、模型、音乐~~
标签:Unity3D、文件读取、特殊文件夹、Application.DataPath、System.IO
快捷访问: