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

2023-11-14

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存储

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

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

  • 为什么这个 Web api 控制器不并发?

    我有一个 Web API 控制器 里面有以下方法 public string Tester Thread Sleep 2000 return OK 当我调用它 10 次 使用 Fiddler 时 我预计所有 10 次调用都会在大约 2 秒后
  • Exit() 时是否调用基本对象析构函数?

    我意识到这个问题已经出现过几次 但我试图获得上述问题的明确答案 但我不断遇到相互矛盾的信息 我需要知道的是 当我使用 exit 时 基本类对象是否被破坏 我知道需要删除动态内存 但我的意思更像是 include
  • 尝试了解使用服务打开对话框

    我已经阅读了有关使用 mvvm 模式打开对话框的讨论 我看过几个使用服务的示例 但我不明白所有部分如何组合在一起 我发布这个问题寻求指导 以了解我应该阅读哪些内容 以更好地理解我所缺少的内容 我将在下面发布我所拥有的内容 它确实有效 但从我
  • 将类对象放置在向量中?

    我注意到我可以将一个类放置在一个向量中 这是我的程序 我收到以下错误 out blackjack exe blackjack obj blackjack obj error LNK2019 unresolved external symbo
  • 未找到 Boost 库,但编译正常

    我正在尝试在 C 中使用 boost 的文件系统 使用时看起来编译没问题 c c Analyse c o Analyse o g W Wall L usr local lib lboost filesystem lboost system
  • 传递 constexpr 对象

    我决定给予新的C 14的定义constexpr旋转并充分利用它 我决定编写一个小的编译时字符串解析器 然而 我正在努力保持我的对象constexpr将其传递给函数时 考虑以下代码 include
  • 如何使用 Regex.Replace 从字符串中删除数字?

    我需要使用Regex Replace从字符串中删除所有数字和符号 输入示例 123 abcd33输出示例 abcd 请尝试以下操作 var output Regex Replace input d string Empty The d标识符
  • C++中判断unicode字符是全角还是半角

    我正在编写一个终端 控制台 应用程序 该应用程序应该包装任意 unicode 文本 终端通常使用等宽 固定宽度 字体 因此要换行文本 只需计算字符数并观察单词是否适合一行并采取相应的操作 问题是 Unicode 表中的全角字符在终端中占用了
  • 如何使用 x64 运行 cl?

    我遇到了和这里同样的问题致命错误 C1034 windows h 未设置包含路径 https stackoverflow com questions 931652 fatal error c1034 windows h no include
  • 是否使用 C# 数据集? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我对 C 中的数据集概念有点困惑 编码 ASP NET 站点 但这并不重要 在我的阅读中 我了解到它们 本质上 用作我的应用程序和我的
  • 如何将AVFrame转换为glTexImage2D使用的纹理?

    如您所知 AVFrame 有 2 个属性 pFrame gt data pFrame gt linesize 当我从视频 sdcard test mp4 android平台 读取帧后 并将其转换为RGB AVFrame副 img conve
  • 从 C# 使用 Odbc 调用 Oracle 包函数

    我在 Oracle 包中定义了一个函数 CREATE OR REPLACE PACKAGE BODY TESTUSER TESTPKG as FUNCTION testfunc n IN NUMBER RETURN NUMBER as be
  • 在 C# 中为父窗体中的子窗体控件添加事件处理程序

    我有两种形式 一种是带有按钮和文本框的父表单 单击该按钮时 将打开一个对话框 该子窗体又包含一个文本框和一个按钮 现在我想要的是 每当子表单文本框中的文本更改时 父表单文本框中的文本会自动更改 为了获得这个 我所做的是 Form3 f3 n
  • Oauth2中如何同时撤销RefreshToken和使AccessToken失效

    我正在使用 Owin Oauth2 授权和资源服务器相同 开发单页面应用程序 AngularJS Net MVC Json Rest API 的身份验证流程 我选择了 Bearer Token 路由而不是传统的 cookie session
  • 使动态创建的链接标签在 Winforms 中可点击

    我正在制作一个程序 允许用户单击由动态链接标签创建的公司名称 在我想知道如何做到这一点之前 我从未在 C 中使用过链接标签 可为特定用户生成的业务数量各不相同 因此每个用户的链接标签数量并不相同 然后我想捕获业务 ID 以进行 Json 调
  • WPF DataGrid / ListView 绑定到数组 mvvm

    我们假设你有 N 个整数的数组 表示行数的整数值 在模型中 该整数绑定到视图中的 ComboBox Q1 如何将数组 或数组的各个项目 绑定到 DataGrid 或 ListView 控件 以便 当您更改 ComboBox 值时 只有那么多
  • C++:二叉树所有节点值的总和

    我正在准备面试 我被一个二叉树问题困住了 我们如何计算二叉树所有节点中存在的值的总和 优雅的递归解决方案 伪代码 def sum node if node NULL return 0 return node gt value sum nod
  • 了解 Lambda 表达式和委托 [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我已经尝试解决这个问题很长一段时间了 阅读在线博客和文章 但到目前为止还没有成功 什么是代表 什么是 Lambda 表达式 两者的优点
  • MySqlConnectionStringBuilder - 使用证书连接

    我正在尝试连接到 Google Cloud Sql 这是一个 MySql 解决方案 我能够使用 MySql Workbench 进行连接 我如何使用 C 连接MySqlConnectionStringBuilder 我找不到提供这三个证书的
  • 当用户更改 Windows 中的语言键盘布局时如何通知?

    I want to show a message to user when the user changes the language keyboard layout of Windows for example from EN to FR

随机推荐

  • mysql 用户流失_利用SQL对平台用户行为进行分析

    一 提出问题 1 平台的用户流失情况是怎样的 2 造成该种流失情况是原因是什么 二 理解数据 1 数据来源 https tianchi aliyun com dataset dataDetail dataId 649 userId 1 本数
  • svn 新建文件不能直接提交终于解决了

    preface 一直在做的一个项目最近要上线了 之前一直遗留了一个 svn 问题 新创建的文件不能 直接在外层目录直接提交 只能一级一级 的先添加目录 然后添加目录中的文件 最后在外层目录提交 因为写得东西太多 总不可避免的 会有遗漏提交
  • c++堆栈类模板实现

    最近在复习数据结构 涉及到堆栈的实现 通过类模板可以使堆栈的存储数据类型更为灵活 下面是堆栈的实现代码 ifndef MYSTACK H define MYSTACK H include
  • Spring-Boot-MainApplication 类文件的位置

    搭建 SpringBoot 项目时有一个主程序入口类 这个 MainApp 类必须在放在整个项目的最根目录 Spring 在扫描注解的时候是扫描这个文件所在包以下的所有Class 如果其他类放在了高于这个类或其他目录下就会扫描不到 impo
  • [思考进阶]01 如何克服自己的无知?

    除了要提升自己的技术能力 思维的学习和成长也非常非常重要 特推出此 思考进阶 系列 进行刻意练习 从而提升自己的认知 有段时间我特别喜欢研究一些定律和法则 比如 熵增定律 懒蚂蚁效应 蝴蝶效应 吸引力法则 多米诺效应等等 大部分都是看书或者
  • c8051f120的spi应用总结

    spi应用总结 主控程序中SPI通信的铁电 想用FEDR45V100A 替代FM25V10 发现铁电存储时波形正常 但读出数据都为0xff 还在查找问题中 一 主控界面 设置 gt 管理员设置 gt 5网络参数设置 gt 4导出参数 5导入
  • 高并发,你真的理解透彻了吗?

    高并发 几乎是每个程序员都想拥有的经验 原因很简单 随着流量变大 会遇到各种各样的技术问题 比如接口响应超时 CPU load升高 GC频繁 死锁 大数据量存储等等 这些问题能推动我们在技术深度上不断精进 在过往的面试中 如果候选人做过高并
  • 已启用Azure Arc的Kubernetes第2部分:添加安全性和监视

    目录 设置Microsoft Defender for Clound 启用Microsoft Defender 安装Microsoft Defender for Kubernetes Cluster Extension 设置Azure Mo
  • android 音乐波动动画

    需求 在播放音乐的时候 随机产生不规律动画 下载地址 http download csdn net detail qq 28195645 9700355 自定义音乐波动控件 package com sun audioplayingwave
  • cocos creator v3.6版本使用Intersection2D模块的circleCircle方法

    在cocos creator v3版本中Intersection2D模块的circleCircle方法可以用来检测两个圆形是否相交 该方法可以实现的功能有 cocos creator吸铁石实现 cocos creator物体在固定位置吸附
  • Altium Designer 20查找指定元器件

    方法一 快捷键J C 输入元器件编号之后 鼠标会跳转到指定的元器件上 等同于 方法二 PCB面板中过滤查找
  • 如果编程IDE的使用受到限制,我们该何去何从?

    最近看到下面的信息 JetBrains宣布 无限期暂停在俄罗斯和白俄罗斯的销售 突然心头一紧 如果 诸如像VS VS Code Android Studio Altium Designer等等IDE国内的使用受到限制 国产IDE有什么替代吗
  • CSS使用方法

    css就是规定各种显示风格样式的名称和设置值的规则 它有4种方式可以将样式加入到HTML中 分别是内联样式表 嵌入样式表 外联样式表 输入样式表 内联样式表 在html标签中直接使用style属性 它适用于只需要将一些简单的样式应用于某个独
  • tkinter 界面设计工具

    先推荐一个非tkinter的GUI框架 Python Eel 是Electron的python版 vb6 https gitcode net mirrors cdhigh Visual Tkinter for Python https gi
  • 华为女性开发者峰会 共同感受“她力量”

    关注我们牛年牛气冲天 4月28日 HUAWEI WOMEN DEVELOPERS2021华为女性开发者峰会 广州站圆满落幕 身处不同领域 不同职业发展阶段的科技女性齐聚一堂 共同感受 她力量 峰会邀请到了多位优秀科技女性代表 从技术心得 从
  • python-批量顺序重命名文件

    网上找的 稍微改了一下 原文找不到了抱歉 rename py import sys import os i len sys argv print argv is d i if len sys argv 3 print nerror plea
  • 记一次win 10 下wsl2 机制 的docker 镜像文件转移过程

    解决了 解决使用win10 docker 后C盘存储过大的问题 的问题 我使用的win10 在开启了wsl2之后 使用docker desktop用 use the WSL2 based engine 选项 使用起来如丝般畅滑 但是 随着各
  • AI绘画:StableDiffusion实操教程-完美世界-魔女(附高清图下载)

    前段时间我分享了StableDiffusion的非常完整的教程 AI绘画 Stable Diffusion 终极宝典 从入门到精通 尽管如此 还有读者反馈说 尽管已经成功安装 但生成的图片与我展示的结果相去甚远 真实感和质感之间的差距到底在
  • C++中的类型推导

    本文参考Effective Morden C C 98只有一种类型推导规则 函数模板 而C 11改变了其中的一些规则 并添加了另外两种类型推导 他们是auto和decltype C 14又有了进一步的扩充 一 首先来看函数模板中的类型推导
  • Unity学习:资源存储加载之——文件夹、路径格式及其方法等

    1 Assets文件夹 Assets文件夹是unity项目中放置游戏资源的主文件夹 根目录文件夹 1 路径格式 assetsPath Assets xx xx xxx 2 编辑器下使用的加载方法 Resources LoadAssetAtP