【Unity3D】资源管理
1 前言
Unity 中资源管理方案主要有 Resources、TextAsset、ScriptableObject 、AssetDatabase、PlayerPrefs、Addressables、AssetBundle、SQLite,本文将介绍其中大部分方案。
2 Resources
Resources 主要用于加载资源,被加载的资源需要放在 Resources 目录下,可以在 Assets 的任何子目录下创建 Resources 目录,Unity 会自动检索到这些 Resources 目录。
Test_Resources.cs
using UnityEngine;public class Test_Resources : MonoBehaviour {private void Awake() {GameObject cube = Resources.Load<GameObject>("CubePrefab");Material cubeMat = Resources.Load<Material>("CubeMat");cube.GetComponent<Renderer>().material = cubeMat;Instantiate(cube);}
}
3 TextAsset
TextAsset 主要用于加载文本、表格文件,官方介绍见→TextAsset。
Test_TextAsset.cs
using UnityEngine;public class Test_TextAsset : MonoBehaviour {[SerializeField]private TextAsset heightDatas;private void Awake() {string[] textInLines = heightDatas.text.Split('\n');for (int i = 1; i < textInLines.Length; i++) {string[] values = textInLines[i].Split(",");string name = values[0];int age = int.Parse(values[1]);float height = float.Parse(values[2]);Debug.Log("name=" + name + ", age=" + age + ", height=" + height);}}
}
打印如下。
4 ScriptableObject
ScriptableObject 主要用于持久化数据、项目参数配置、角色参数配置等,官方介绍见→ScriptableObject,主要回调函数如下,继承 ScriptableObject 后,重写下述方法即可在相应状态下自动回调。
SOData.cs
using UnityEngine;public class SOData : ScriptableObject {[SerializeField]private string _name; // 姓名[SerializeField]private int _age; // 年龄[SerializeField, Range(1f, 2.3f)]private float _height; // 身高public string Name => _name;public int Age => _age;public float Height => _height;
}
编译后,在 Assets 窗口右键,依次选择【Create→SOData】,创建对象,并重命名为 SOData_1。选中 SOData_1 对象后,在 Inspector 窗口可以调整属性,如下。
5 AssetDatabase
AssetDatabase 用于加载资源,仅在 Unity 编辑器模式下使用,官方介绍见→AssetDatabase、Batching with the AssetDatabase。
AssetDatabase.CopyAsset("Assets/Asset1.txt", "Assets/Text/Asset1.txt"); // 复制资源
AssetDatabase.MoveAsset("Assets/Asset2.txt", "Assets/Text/Asset2.txt"); // 移动资源
AssetDatabase.DeleteAsset("Assets/Asset3.txt"); // 删除资源
AssetDatabase.ImportAsset(path1, ImportAssetOptions.Default); // 导入资源
GameObject cube = AssetDatabase.LoadAssetAtPath<GameObject>("Assets/Loader/CubePrefab.prefab"); // 加载资源
Test_AssetDatabase.cs
using UnityEditor;
using UnityEngine;public class Test_AssetDatabase {[MenuItem("Custom/Import Cube")]public static void ImportImage() {// 导入Cube预设体string path1 = "Assets/Loader/CubePrefab.prefab";AssetDatabase.ImportAsset(path1, ImportAssetOptions.Default);GameObject cube = AssetDatabase.LoadAssetAtPath<GameObject>(path1);// 导入Cube材质string path2 = "Assets/Loader/CubeMat.mat";AssetDatabase.ImportAsset(path2, ImportAssetOptions.Default);Material mat = AssetDatabase.LoadAssetAtPath<Material>(path2);// 实例化Cubecube.GetComponent<Renderer>().material = mat;GameObject.Instantiate(cube);}
}
说明:Test_AssetDatabase 脚本文件需要放在 Editor 目录下面。编译后,在菜单栏依次点击【Custom→Import Cube】即可创建一个 Cube 对象。
6 PlayerPrefs
PlayerPrefs 是一个在游戏会话之间存储玩家偏好的类,它可以将字符串、浮点数和整数值存储到用户的平台注册表中。Unity 将 PlayerPrefs 存储在本地注册表中,没有加密,不要使用 PlayerPrefs 数据存储敏感数据。PlayerPrefs 官方介绍见→PlayerPrefs。
PlayerPrefs 的静态方法如下。
Test_PlayerPrefs.cs
using UnityEngine;public class Test_PlayerPrefs : MonoBehaviour {private void Awake() {PlayerPrefs.SetString("name", "Zhang san");PlayerPrefs.SetInt("age", 25);PlayerPrefs.SetFloat("height", 1.75f);Debug.Log("name=" + PlayerPrefs.GetString("name")+ ", age=" + PlayerPrefs.GetInt("age")+ ", height=" + PlayerPrefs.GetFloat("height"));}
}
打印日志如下。
7 Addressables
Addressables 包提供了组织和打包应用内容的工具和脚本,在运行时可以加载和释放资源,官方介绍见→Addressables。
1)安装 Addressables
在菜单栏依次选择【Window→Package Manager】,打开包管理器,按照以下步骤安装 Addressables。
2)设置资源为 Addressable
在 Assets 窗口选中资源,在 Inspector 窗口勾选 Addressable,并修改资源 Key,如下。
3)分组管理 Addressables
在菜单栏依次选择【Window→Asset Management→Addressables→Groups】,打开 Addressables Groups 窗口,如下。
可以拖拽 Addressables Groups 窗口,使其停靠在 Game 窗口旁边,如下。可以看到 Resources 目录下的资源会自动添加到 Addressables 中。
依次点击【New→Packed Assets】,创建新包,并重命名,便于对资源进行分组管理,如下。
4)加载资源
Test_Addressables.cs
using UnityEngine;
using UnityEngine.AddressableAssets;
using UnityEngine.ResourceManagement.AsyncOperations;public class Test_Addressables : MonoBehaviour {private GameObject cube;private void Awake() {Addressables.InstantiateAsync("CubePrefab2").Completed += OnInstantiate;}private void OnInstantiate(AsyncOperationHandle<GameObject> operationHandle) { // 游戏对象加载成功回调函数cube = operationHandle.Result;Addressables.LoadAssetAsync<Material>("CubeMat2").Completed += OnLoadAsset;}private void OnLoadAsset(AsyncOperationHandle<Material> operationHandle) { // 材质加载成功回调函数cube.GetComponent<Renderer>().material = operationHandle.Result;}
}
说明:引入 UnityEngine.AddressableAssets 和 UnityEngine.ResourceManagement.AsyncOperations 这两个命名空间时,在 VSCode 中可能会报错,但 Unity 中不会报错,也不影响程序运行。如果想消除 VSCode 中的这个报错,可以重启一下 Unity 和 VSCode,就不会报错了。
相关文章:
【Unity3D】资源管理
1 前言 Unity 中资源管理方案主要有 Resources、TextAsset、ScriptableObject 、AssetDatabase、PlayerPrefs、Addressables、AssetBundle、SQLite,本文将介绍其中大部分方案。 2 Resources Resources 主要用于加载资源,被加载的资源需要放在 Resources…...
数据结构-----队列
目录 前言 队列 定义 队列的定义和操作方法 队列节点的定义 操作方式 顺序表实现队列(C/C代码) 链表实现队列(C/C代码) Python语言实现队列 前言 排队是我们日常生活中必不可少的一件事,去饭堂打饭的时候排队&a…...
postgresql教程
postgreSQL教程目录 postgreSQL 创建数据库的方式:postgreSQL删除数据库的方式:PostgreSQL 创建表格postgre删除表格:postgreSQL INSERT INTO 语句postgreSQL SELECT 语句:postgresql索引:什么情况下要避免使用索引? p…...
1万6千多最好的背单词SQLITE\ACCESS数据库
本来是实在不想再整英语类的数据了,因为实在是太多了,奈何今天弄到的这份数据库实在很精彩,因此还是希望能够有人喜欢。 搞一个“accept”字段的样例: 【explain】 vi. 承认;同意;承兑; vt. 接受;承认;承担;承兑; 【etyma】 ac…...
springboot aop Aspectj 切面
常用: Aspect、Component、Pointcut、Before、AfterReturning SpringBoot的AOP(aspect注解)的简单使用 - 知乎 springboot项目中引入Aspectj并使用_springboot引入aspectj_山鬼谣me的博客-CSDN博客...
Leetcode 2862. Maximum Element-Sum of a Complete Subset of Indices
Leetcode 2862. Maximum Element-Sum of a Complete Subset of Indices 1. 解题思路2. 代码实现 题目链接:2862. Maximum Element-Sum of a Complete Subset of Indices 1. 解题思路 这一题的核心在于想明白一点: 要使得子序列当中任意两个数之积均为…...
第一百四十七回 自定义组件一
文章目录 概念介绍实现方法示例代码 我们在上一章回中介绍了跟手指移动的小球相关的内容,本章回中将介绍 自定义组件.闲话休提,让我们一起Talk Flutter吧。 概念介绍 在项目中有些内容无法通过现有的组件来实现,因此需要自定义组件…...
MySQL 重复数据的处理
文章目录 MySQL 重复数据的处理一,常用处理方法二,统计重复数据三,过滤重复数据四,删除重复数据拓展:MySQL预防SQL注入(一)SQL注入 概述(二)预防措施 MySQL 重复数据的处…...
Java文字描边效果实现
效果: FontUtil工具类的完整代码如下: 其中实现描边效果的函数为:generateAdaptiveStrokeFontImage() package com.ncarzone.data.contentcenter.biz.img.util;import org.springframework.core.io.ClassPathResource; import org.springfr…...
【Web_环境搭建_Python3_pip】pip的升级、安装、更新、卸载,以及pipupgrade和pip-review的基础使用
** 官方说明 ** pip(Python Package Index)是一个以 Python 语言写成的软件包管理系統,使用 pip 可以非常方便的安装和管理 python 软件包PIP ** 查看信息 ** 查看版本 : pip --version查看已有 : pip list、pip freeze查看帮助 : pip help查看库信息 : pip show -f package_…...
农民朋友有福利啦!建行江门市分行“裕农通+农资结算”平台正式上线
随着广东广圣农业发展有限公司办公室内的裕农通“智慧眼”结算机“叮”的一声到账提醒,标志着全国首个“裕农通农资结算“平台的成功上线,也标志着建行广东省江门市分行的裕农通业务又迈上了一个新的台阶。 广东广圣农业发展有限公司(以下简…...
super详解
父类 package com.mypackage.oop.demo06;public class Person06{public Person06() {System.out.println("Person06无参执行了");}protected String name "hexioahei";public void print(){System.out.println("Person");} }子类 package com…...
GMS地下水数值模拟丨GMS各模块、三维地质模型构建及与MODFLOW耦合、地下水流动数值模拟及报告编制、地下水溶质运移模型、反应性溶质运移等
目录 第一部分 地下水数值模拟理论模块 第二部分 地下水数值模拟数据收集、准备及预处理 第三部分 GMS各模块实践 第四部分 三维地质模型构建及与MODFLOW耦合 第五部分 地下水流动数值模拟及报告编制 第六部分 地下水溶质运移模型 第七部分 反应性溶质运移 更多应用 以…...
Redis 配置文件详解 - 持久化(RDB、AOF)
目录 Redis 配置文件详解 单位 包含 INCLUDES 网络 NETWORK 通用 GENERAL 快照 SNAPSHOTTING (持久化) 复制 REPLICATION(主从复制) 安全 SECURITY(账号密码设置) 编辑 限制 CLIENTS 追加模…...
在线Excel转JSON工具
在线Excel转JSON工具 上传excel将数据转换成json格式...
Spring编程常见错误50例-Spring Bean依赖注入常见错误(下)
Value没有注入预期的值 问题 对于Value可以装配多种类型的数据: 装配对象: Value("#{student}") private Student student;Bean public Student student(){Student student createStudent(1, "xie");return student; }装配字符…...
SpringBoot整合Canal实现MySQL与ES数据同步
文章目录 SpringBoot项目引入Canal依赖配置文件项目结构设置监听类其余类、接口内容启动类实体类Controller类Mapper接口Serice接口 运行测试 开始之前请确认docker中已运行mysql与canal容器,并完成了监听binlog配置 未完成可移步: Docker部署Canal监听…...
Zookeeper 源码分析流程
文章目录 前言Zookeeper启动加载磁盘数据与客户端的通信交互Leader选举准备节点状态处理总结 前言 Zookeeper 作为分布式协调服务为分布式系统提供了一些基础服务,如:命名服务、配置管理、同步等,使得开发者可以更加轻松地处理分布式问题。 …...
计数排序与基数排序
计数排序与基数排序 计数排序 计数排序:使用一个数组记录序列中每一个数字出现的次数,将该数组的下标作为实际数据,元素的值作为数据出现的次数。例如对于序列[3,0,1,1,3,3,0,2],统计的结果为: 0出现的次数…...
Mysql—表操作
目录 1、linux中数据库表名区分大小写,windows不区分2、创建数据库表3、外键4、查看数据表结构5、修改表5.1、修改表名5.2、添加字段5.3、指定位置添加字段5.4、修改字段名称5.5、修改字段类型5.6、修改字段位置5.7、删除字段5.8、修改表存储引擎5.9、删除外键 1、l…...
SpringCloud——微服务
微服务技术栈 在之前的开发过程中,我们将所有的服务都部署在一台服务器中,当我们的服务开始越来越多,业务越来越复杂,当一台服务器不能承担我们的业务的时候,就需要将不同的业务分开部署在不同的服务器上,…...
深入理解Java单例模式和优化多线程任务处理
目录 饿汉模式懒汉模式单线程版多线程版双重检查锁定 阻塞队列 单例模式能保证某个类在程序中只存在唯一一份实例, 而不会创建出多个实例,并提供一个全局访问点。 饿汉模式 类加载的同时,创建实例。 class Singleton {private static final Singlet…...
已解决 Kotlin Error: Type mismatch: inferred type is String but Int was expected
🌷🍁 博主猫头虎(🐅🐾)带您 Go to New World✨🍁 🦄 博客首页: 🐅🐾猫头虎的博客🎐《面试题大全专栏》 🦕 文章图文并茂🦖…...
Web应用系统的小安全漏洞及相应的攻击方式
写作目的 本文讲述一个简单的利用WebAPI来进行一次基本没有破坏力的“黑客”行为。 主要目的如下: 了解什么叫安全漏洞 知道什么是api 了解一些获取api的工具 通过对API的认识了解白盒接口测试基本概念和技术 免责声明: 本文主要是以学习交流为目的&a…...
git工具下载和安装
(1)从git官网下载安装包 然后安装 https://git-scm.com/downloads (2)git 学习参考官方的资料 https://git-scm.com/book/en/v2...
腾讯mini项目-【指标监控服务重构】2023-08-04
今日已办 关于 span-references 的调研 https://github.com/DataDog/dd-trace-js/issues/1761 https://github.com/open-telemetry/opentelemetry-specification/blob/874a451e7f6ac7fc54423ee3f03e5394197be35b/specification/compatibility/opentracing.md#span-references h…...
怎么推广自己抖店的商品?最适合0经验新手操作的办法,来看看
我是王路飞。 抖店开通后,想要把自己店铺的商品卖出去,就需要进行推广了。 但是怎么推广呢? 要么利用抖音的搜索和推荐流量,获取曝光,实现点击和转化。 不过这种玩法有个弊端,就是需要你有一定的电商经…...
线性代数的本质(三)——线性方程组
文章目录 线性方程组高斯消元法初等行变换线性方程组的解向量方程齐次线性方程组的解非齐次线性方程组的解 线性方程组 高斯消元法 客观世界最简单的数量关系是均匀变化的关系。在均匀变化问题中,列出的方程组是一次方程组,我们称之为线性方程组(Linea…...
轻量级性能测试工具 wrk 如何使用?
项目设计之初或者是项目快要结束的时候,大佬就会问我们,这个服务性能测试的结果是什么,QPS 可以达到多少,RPS 又能达到多少?接口性能可以满足未来生产环境的实际情况吗?有没有自己测试过自己接口的吞吐量&a…...
WebGL 视图矩阵、模型视图矩阵
目录 立方体由三角形构成 视点和视线 视点、观察目标点和上方向 视点: 观察目标点: 上方向: 在WebGL中,观察者的默认状态应该是这样的: 视图矩阵程序(LookAtTriangles.js) 实际上&…...
哈尔滨做网站seo的/西安企业seo外包服务公司
故事是这样发生的:前几天和同事在公司吃饭,同事讲起他早年间相亲的故事。女方是某IT公司的HR,研究生学历,两人第一次见面的一段对话,觉得非常的有意思。 两人是共同的朋友介绍的,第一次见面地点商定在一家餐…...
制作企业网站公司排名/自媒体营销
1.模糊查询前导不会走索引 select id,user_name,price_code from user_activity_info where user_name like %zhang; 如果非要使用前导索引的话可以借助Apache的Lucence索引工具 2.字段默认值不要设置成null 如果可以请设置为 not null 3.不要在SQL中对字段进行计算&#…...
顺德网站建设公司/浏览器老是出现站长工具
上周我遇到了最近的Authorize.net SSL证书失效debacle。我终于让curl接受了他们的证书:$ curl -Iv https://secure.authorize.net...* SSL certificate verify ok....但python仍然拒绝了它的请求:>>> requests.get(https://secure.authorize.ne…...
网站推广适合女生做吗/网络营销模式案例
sprintf函数的unicode版本_stprintf 其他的如strcat等,建议使用_tcscat, _tcscpy, _tcscmp、_tcsncmp、_tcslen等等。 sprintf()函数的用法总结...
怎么在网站做直播间/百度推广开户公司
1.源码下载首先是下载 git for windows:Git-2.14.1-64-bit.exe。然后新建D:mangos文件夹,在该文件夹下右键选择"Git Bash Here",打开Git命令行。下载Mangos Zero源码:git clone https://github.com/mangoszero/server.g…...
南沙企业网站建设/seo是什么姓氏
了解了HashMap底层实现原理后,很容易的能推导出HashMap元素插入的步骤,先计算元素hash值,然后mod哈希表长度得到应存入的桶的下标,最后挂链,看一下源码。 public V put(K key, V value) {return putVal(hash(key), key…...