【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…...
【网络安全产品大调研系列】2. 体验漏洞扫描
前言 2023 年漏洞扫描服务市场规模预计为 3.06(十亿美元)。漏洞扫描服务市场行业预计将从 2024 年的 3.48(十亿美元)增长到 2032 年的 9.54(十亿美元)。预测期内漏洞扫描服务市场 CAGR(增长率&…...
抖音增长新引擎:品融电商,一站式全案代运营领跑者
抖音增长新引擎:品融电商,一站式全案代运营领跑者 在抖音这个日活超7亿的流量汪洋中,品牌如何破浪前行?自建团队成本高、效果难控;碎片化运营又难成合力——这正是许多企业面临的增长困局。品融电商以「抖音全案代运营…...
学校招生小程序源码介绍
基于ThinkPHPFastAdminUniApp开发的学校招生小程序源码,专为学校招生场景量身打造,功能实用且操作便捷。 从技术架构来看,ThinkPHP提供稳定可靠的后台服务,FastAdmin加速开发流程,UniApp则保障小程序在多端有良好的兼…...
MVC 数据库
MVC 数据库 引言 在软件开发领域,Model-View-Controller(MVC)是一种流行的软件架构模式,它将应用程序分为三个核心组件:模型(Model)、视图(View)和控制器(Controller)。这种模式有助于提高代码的可维护性和可扩展性。本文将深入探讨MVC架构与数据库之间的关系,以…...
对WWDC 2025 Keynote 内容的预测
借助我们以往对苹果公司发展路径的深入研究经验,以及大语言模型的分析能力,我们系统梳理了多年来苹果 WWDC 主题演讲的规律。在 WWDC 2025 即将揭幕之际,我们让 ChatGPT 对今年的 Keynote 内容进行了一个初步预测,聊作存档。等到明…...
Java 加密常用的各种算法及其选择
在数字化时代,数据安全至关重要,Java 作为广泛应用的编程语言,提供了丰富的加密算法来保障数据的保密性、完整性和真实性。了解这些常用加密算法及其适用场景,有助于开发者在不同的业务需求中做出正确的选择。 一、对称加密算法…...
基于Docker Compose部署Java微服务项目
一. 创建根项目 根项目(父项目)主要用于依赖管理 一些需要注意的点: 打包方式需要为 pom<modules>里需要注册子模块不要引入maven的打包插件,否则打包时会出问题 <?xml version"1.0" encoding"UTF-8…...
微软PowerBI考试 PL300-在 Power BI 中清理、转换和加载数据
微软PowerBI考试 PL300-在 Power BI 中清理、转换和加载数据 Power Query 具有大量专门帮助您清理和准备数据以供分析的功能。 您将了解如何简化复杂模型、更改数据类型、重命名对象和透视数据。 您还将了解如何分析列,以便知晓哪些列包含有价值的数据,…...
视频行为标注工具BehaviLabel(源码+使用介绍+Windows.Exe版本)
前言: 最近在做行为检测相关的模型,用的是时空图卷积网络(STGCN),但原有kinetic-400数据集数据质量较低,需要进行细粒度的标注,同时粗略搜了下已有开源工具基本都集中于图像分割这块,…...
Mysql中select查询语句的执行过程
目录 1、介绍 1.1、组件介绍 1.2、Sql执行顺序 2、执行流程 2.1. 连接与认证 2.2. 查询缓存 2.3. 语法解析(Parser) 2.4、执行sql 1. 预处理(Preprocessor) 2. 查询优化器(Optimizer) 3. 执行器…...
