Unity Editor模式下的System.IO数据访问

在本文,你将学到如何使用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访问的地址会存在偏差(如图所示);

Unity Editor模式下的System.IO数据访问_第1张图片
上段为EXE运行时,下端为Editor模式下

所以,如果获取Resouce文件夹下所有预制物的名称,还是建议用:

 public string[] modelNames;
 private GameObject [] modelList;
    void Start () {
        modelList = Resources.LoadAll("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


快捷访问:

  1. Unity3D 如何设置CubeMap
  2. Unity3D UGUI Button OnClick事件统一管理
  3. UGUI Slider onValueChanged事件统一管理
  4. UGUI Toggle onValueChanged事件统一管理
  5. Unity3D监测按键输入(快捷键)的有效方法
  6. Unity3D Editor模式下的System.IO数据访问 ←您在这里
  7. Unity3D 挂载的脚本取消勾选居然还会运行!!
  8. Unity 代码动态勾选或取消材质球上的选项
  9. Unity SerializeField序列化字段导致Bug的跳坑笔记

你可能感兴趣的:(Unity Editor模式下的System.IO数据访问)