Unity学习:资源存储加载之——文件夹、路径格式及其方法等

1、Assets文件夹

Assets文件夹是unity项目中放置游戏资源的主文件夹,根目录文件夹。

(1)路径格式:assetsPath  = "Assets/xx/xx.xxx";

(2)编辑器下使用的加载方法:Resources.LoadAssetAtPath(assetsPath) ;

Asset文件夹下任意位置任意资源,打包后不存在Asset文件,仅在编辑器环境下运行使用

它可以加载Assets目录下的任意文件夹下的资源,必须是”Assets/xx/xx.xxx”这种路径,并且要带文件的后缀名。

(3)编辑器和打包后都可使用的加载方法:AssetDatabase.LoadAssetAtPath(filePath);

AssetDatabase是一个API,它允许您访问您项目中的资源。它提供了查找资源、加载资源、创建资源、删除资源和修改资源的方法。

它可以读取Assets目录下的任意文件夹下的资源,必须是”Assets/xx/xx.xxx” 这种路径,并且要带文件的后缀名。

仅返回在 Project 视图中可见的资源对象。如果未找到资源,返回Null;

public string filePath;//存档路径

private void Awake()
    {
        filePath  = "Assets/TempTestFile/XXX.mat";
    }

private void testLoad()
    {
        //加载指定资源
        Resources.LoadAssetAtPath(filePath);
        AssetDatabase.loadasset(filePath);

        //加载指定类型的资源
        Material mat = AssetDatabase.LoadAssetAtPath("Assets/Materials", typeof(Material)) as Material;
        Material mat = AssetDatabase.LoadAssetAtPath<Material>("Assets/Materials/XXX.mat");
    }

2、特殊文件夹:Resources文件夹:

Resources是用来存放资源的特殊文件夹。编辑器环境下unity可以方便快速加载Resources文件夹里的资源。

但在打包过程中,会将Assets目录及其所有子目录下的名字为Resources的文件夹合并,并加密压缩。所以打包后只能读取不能写入。

并且在程序启动时会对Resources下的所有对象初始化,构建实例ID。这个过程耗时非线性增加,可能导致程序启动时间过长。

(1)路径格式:assetsPath  = "XXX.png";

XXX.png资源已经在Resources文件夹中了。

(2)加载方法:Resources.Load(assetsPath);

编辑时和运行时都可以使用,直接读取Resources文件夹下的指定资源,

即以Resources文件夹为根目录开始的相对路径,且不包含资源的扩展名。

public string assetsPath;//存档路径

private void Awake()
    {
        assetsPath= "XXX.png";//资源文件直接放到Resources文件夹里
    }
private void Load()
    {
        //1、加载某个资源,文件不用加后缀,直接文件名称即可
        Resources.Load(assetsPath);
        Resources.Load("资源名");

        //2、加载指定文件夹下的所有资源
        Resources.LoadAll("文件夹名");//同步加载
        Resources.LoadAllAsync(文件夹名);//异步加载

        //3、加载指定类型的某个资源
        Resources.Load<GameObject>("Prefabs/Cube");
        TextAsset itemText = Resources.Load<TextAsset>("Config/Item");
        string itemsJson = itemText.text;//获取文本文件里的内容
        //注:txt/json等文本在Unity里面是TextAsset类型,这里加载放到Resources文件夹下Config文件夹里的命名为Item的Json文件
        
        
       //4、卸载非GameObject类型的资源,将其他已加载资源及其克隆体卸载
       Resources.UnloadAsset(obj);

       //4、卸载所有没有用到的资源
       Resources.UnloadUnusedAssets(); 
    }

3、特殊文件夹:streamingAssets文件夹

(1)说明:StreamingAssets流文件夹,一般是存放预存的信息、初始的AssetsBundle资源,不要去改动 ;

StreamingAssets文件夹目录下的所有资源都会打入发布包中,但资源都是不压缩的,所以它会比较大、占空间,且打包后运行时只能读不能写,

(2)加载方法:Application.streamingAssetsPath(path);

不同平台下该文件的路径也不同,可以用Application.streamingAssetsPath加载,会根据当前的平台,自动加载正确的streamingAsset文件;

public string filePath;//存档路径

private void Awake()
    {
        filePath = Application.streamingAssets +"/jsonDatas.json";
    }


//直接加载资源
private void TestLoad()
    {
        Application.streamingAssetsPath(filePath);
    }


//数据流形式读取指定路径的文件数据
private void LoadFile()
    {
        if (!File.Exists(FilePath))
        {
            Debug.Log("找不到存档文件");
        }
        else
        {
            //根据文件路径创建数据流
            StreamReader sr = new StreamReader(FilePath);
            //读取Json数据
            string ReadStr = sr.ReadToEnd();
            //关闭数据流
            sr.Close();
            //将获取到的Json数据转为Datas类数据,这里使用LitJson库解析,也可使用其他Json库
            Ddatas tempDatas= JsonMapper.ToObject<Datas>(ReadStr);
            //把读取的数据赋值给目标数据
            datas= tempDatas;

            Debug.Log("本地存档读取赋值成功");
        }
    }

4、AssetBundle资源

(1)磁盘上的实际文件,AssetBundle存档文件,包含可在运行时由 Unity 加载的特定于平台的非代码资源。

(2)AssetBundle”也可以指代通过代码进行交互以便从特定 AssetBundle 存档加载资源的实际 AssetBundle 对象。

5、Application.dataPath路径:

用于返回工程文件所在位置的数据文件夹的路径

public string filePath;//存档路径

private void Awake()
    {
        filePath = Application.dataPath + "/StreamingFile/jsonDatas.txt";
        filePath = Application.dataPath + "/StreamingAssets/jsonDatas.json";
    }

//数据流形式读取文件数据
private void testLoad()
    {
        if (!File.Exists(FilePath)) Debug.Log("找不到存档文件");
        else
        {
            StreamReader sr = new StreamReader(FilePath);
            string ReadStr = sr.ReadToEnd();
            sr.Close();
            Ddatas tempDatas= JsonMapper.ToObject<Datas>(ReadStr);
            datas= tempDatas;
        }
    }

6、Application.streamingAssetsPath路径:

用于返回流数据的缓存目录,返回路径为相对路径,适合设置一些外部数据文件的路径。

public string filePath;//存档路径

private void Awake()
    {
        filePath = Application.streamingAssets +"jsonDatas.txt";
        filePath = Application.dataPath + "/StreamingAssets/jsonDatas.json";
    }
private void testLoad()
    {
        Application.streamingAssetsPath(filePath);
    }

7、Application.persistenDataPath路径:

用于返回一个持久化数据存储目录的路径,可以在此路径下存储一些持久化的数据文件

该值是目录路径;此目录中可以存储每次运行要保留的数据。在 iOS 和 Android 上发布时,persistentDataPath 指向设备上的公共目录。应用程序更新不会擦除此位置中的文件。用户仍然可以直接擦除这些文件。

内容可读写,不过只能运行时才能写入或者读取

是一个外部存储路径,和项目安装位置无关的绝对路径,多是保存用户信息数据的位置,升级版本不会影响到这些数据;

考虑多平台的话,尽量存到Application.persistenDataPath;

public string filePath;//存档路径

private void Temp()
    {
        filePath = Application.persistentDataPath + "/jsonDatas.json";
    }

8、Application.temporaryCachePath路径:

用于返回一个临时数据的缓存目录

是用来放缓存和临时的,用户可以清理掉;

public string filePath;//存档路径

private void Temp()
    {
        filePath = Application.temporaryCachePath+ "/jsonDatas.json";
    }

 注:关于数据存储读取具体操作,可以参考我的其他文章笔记:
Unity数据存储学习——创建、存储、读取Json文件

Unity数据存储学习之——本地playerPref存储

猜你喜欢

转载自blog.csdn.net/weixin_43908355/article/details/115211590