Unity开发 您所在的位置:网站首页 unity选择文件夹 Unity开发

Unity开发

2024-07-01 22:34| 来源: 网络整理| 查看: 265

摘要:

本文主要讲解Unity开发过程中编辑器下的三种(Assets、Resource、StreamingAssets)特殊文件夹,以及资源存储加载时设置的4种不同路径的讲解说明。

中间简要介绍了什么是AssetBundle资源。

一、特殊文件夹 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,它允许您访问您项目中的资源。

1)它提供了查找资源、加载资源、创建资源、删除资源和修改资源的方法。

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

3)仅返回在 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("Assets/Materials/XXX.mat"); } 2、Resources

Resources是用来存放资源的特殊文件夹。

(1)说明讲解:

        1)编辑器环境下unity可以方便快速加载Resources文件夹里的资源。

        2)在打包后只能读取不能写入。

        3)并且在程序启动时会对Resources下的所有对象初始化,构建实例ID。

因为在打包过程中,会将Assets目录及其所有子目录下的名字为Resources的文件夹合并,并加密压缩。且这个过程耗时非线性增加,可能导致程序启动时间过长。

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

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

(3)加载方法: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("Prefabs/Cube"); TextAsset itemText = Resources.Load("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(ReadStr); //把读取的数据赋值给目标数据 datas= tempDatas; Debug.Log("本地存档读取赋值成功"); } } 二、特殊资源 AssetBundle资源

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

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

三、各种路径格式讲解说明 1、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(ReadStr); datas= tempDatas; } } 2、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); } 3、Application.persistenDataPath

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

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

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

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

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

public string filePath;//存档路径 private void Temp() { filePath = Application.persistentDataPath + "/jsonDatas.json"; } 4、Application.temporaryCachePath

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

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

public string filePath;//存档路径 private void Temp() { filePath = Application.temporaryCachePath+ "/jsonDatas.json"; }

关于数据解析存取,以及资源管理等具体操作,可以参考我的其他文章;



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有