【Unity】使用AssetDatabase编辑器资源管理
最近参考了各位大神的资源,初步学习了Unity的资源管理模式,包括在编辑器管理(使用AssetDatabase)和在运行时管理(使用Resources和AssetBundle)。在此简单总结编辑器模式下的资源管理方法,方便自己回顾。
① 加载/卸载资源
using UnityEngine;
using System.Collections;
#if UNITY_EDITOR
using UnityEditor; // 这个文件在手机上没有,需要使用条件编译
#endif
public class TestLoadAsset : MonoBehaviour {
void Start () {
#if UNITY_EDITOR
// 加载资源
Texture2D image = AssetDatabase.LoadAssetAtPath("Assets/Images/1.jpg", typeof(Texture2D)) as Texture2D;
// 使用资源
Debug.Log(image.name);
// 卸载资源:注意,卸载方法是在Resources类中
Resources.UnloadAsset(image);
// 调用GC来清理垃圾,资源不是立刻就被清掉的
Debug.Log(image);
#endif
}
}
需要注意的是,调用Resources.UnloadAsset()来清理资源时,只是标记该资源需要被GC回收,但不是立刻就被回收的,下一行的Debug.Log依然能看到该资源的引用不是Null。
② 创建资源
using UnityEngine;
using System.Collections;
#if UNITY_EDITOR
using UnityEditor; // 这个文件在手机上没有,需要使用条件编译
#endif
// 创建资源
public class TestCreateAsset : MonoBehaviour {
void Start () {
#if UNITY_EDITOR
// 加载资源
Material mat = AssetDatabase.LoadAssetAtPath("Assets/Materials/New Material.mat", typeof(Material)) as Material;
// 以mat为模板创建mat2
Material mat2 = Object.Instantiate<Material>(mat);
// 创建资源
AssetDatabase.CreateAsset(mat2, "Assets/Materials/1.mat");
// 刷新编辑器,使刚创建的资源立刻被导入,才能接下来立刻使用上该资源
AssetDatabase.Refresh();
// 使用资源
Debug.Log(mat2.name);
#endif
}
}
运行脚本后,会发现在Project视窗中多了一个刚创建的1.mat资源。
需要注意的是,无法直接创建一个资源,可以先加载一个现有的资源作为模版,或者像官方文档中的例子那样先New一个模板出来。
③ 修改资源
using UnityEngine;
using System.Collections;
#if UNITY_EDITOR
using UnityEditor; // 这个文件在手机上没有,需要使用条件编译
#endif
public class TestModifyAsset : MonoBehaviour {
// Use this for initialization
void Start () {
#if UNITY_EDITOR
// 加载资源
Material mat = AssetDatabase.LoadAssetAtPath("Assets/Materials/New Material.mat", typeof(Material)) as Material;
// 修改资源
mat.color = Color.blue;
// 通知编辑器有资源被修改了
EditorUtility.SetDirty(mat);
// 保存所有修改
AssetDatabase.SaveAssets();
#endif
}
}
运行脚本后,会发现New Material.mat这个材质资源的颜色被永久改为了蓝色。
需要注意的是,在对资源做了任何修改后,需要通知编辑器有资源已被修改,使用 EditorUtility.SetDirty()函数来标记已被修改的资源,然后调用AssetDatabase.SaveAssets()来保存修改。
【Unity】使用AssetDatabase编辑器资源管理的更多相关文章
- Unity的AssetDatabase路径格式
开发环境 windows 7 Unity 5.3 及更高版本 前言 使用AssetDatabase.Load或AnimatorController.CreateAnimatorControllerAt ...
- 用SublimeText当Unity Shader的编辑器
用Visual Studio写shader实在蛋疼,那可能就会有人要问了,为啥不用插件可视化制作shader呢?因为我是新手,新手还是老老实实敲代码,慢慢来- 所以试着在网上找找,有没有类似的插件或者 ...
- 【Unity入门】编辑器常用视图介绍
版权声明:本文为博主原创文章,转载请注明出处. 打开Unity编辑器的主窗口,在窗口的右上角可以看到有个“Layout”按钮.这是用来对Unity编辑器主窗口上面的各个窗口面板进行布局的.通常情况下我 ...
- Unity项目中的资源管理
这是我在2017金山技术开放日分享的部分内容.从贴图资源格式配置的介绍开始,引申出资源配置工具,最后再谈谈一整套项目资源管理方案.在GitHub上可以获取到资源配置工具的代码,是基于下面理念的一份简单 ...
- 【Unity】自定义编辑器窗口——拓展编辑器功能
最近学习了Unity自定义编辑器窗口,下面简单总结,方便用到时回顾. 新建一个脚本: using UnityEngine; using System.Collections; using UnityE ...
- (转)Unity笔记之编辑器(UnityEditor)
在使用unity3d的过程中,时常会需要从场景中寻找或者调用一个对象,而Unity就提供了一个贴心的功能——拖拽.用鼠标拖一下中比写堆代码直观的多吧!但是Unity提供的远远不止这一丢丢,下面我们来简 ...
- 使用rider做为unity的代码编辑器
使用Rider做的编写Unity代码的IDE,记录一些与VS不相同的笔记 安装和设置方法: 我使用Rider 2019.1 + Unity3D 2018.3.4,在安装完Rider之后,在Unity中 ...
- Unity 游戏框架:资源管理神器 ResKit
此篇文章准备了将近两周的时间,写了改,改了删.之前有朋友反馈,上一个文章太冗长了,影响阅读体验,这一讲就走个精简路线.所以只要不是很重要的内容就都删减掉了. 文章分两个部分,第一部分是原理,第二部分是 ...
- unity插件开发——AssetDatabase
AssetDatebase也是一个静态类,他的作用是管理整个工程的所有文件(一般成为“资产”).直观地说就是管理整个project窗口中的所有内容,比如,你可以增加.删除.修改文件等等. 这里有几个常 ...
随机推荐
- iphone 开发中使用zbar时遇到的几个典型问题解决方法。
iphone 开发中使用zbar时遇到的几个典型问题解决方法. 在近期的一个ios项目中使用到了一个二维码扫描库(Qrcode)--ZBar, 期间遇到2个问题. 1. zbar下载后使用其l ...
- 【转载】Spring Cache介绍
原文地址:http://www.cnblogs.com/rollenholt/p/4202631.html 缓存是实际工作中非常常用的一种提高性能的方法, 我们会在许多场景下来使用缓存. 本文通过一个 ...
- tomcat启动报错 java.lang.ClassNotFoundException: org.apache.jsp.index_jsp
项目运行一直很平稳,但是换了tomcat之后打开jsp网页时就报错,描述如下: 1. 错误描述 打开jsp网页时报错 java.lang.NullPointerException org.ap ...
- python selenium 报错unknown error: cannot focus element 解决办法
登录框由于js限制,定位到元素后无法sendkey ,sendky报错如下: selenium.common.exceptions.WebDriverException: Message: unkno ...
- django ---- models继承
django 中各个models之前可以有继承关系.这种继承关系又可以分成三种情况: 1.简单继承 2.抽象继承 3.代理 一.简单继承: model定义 from django.db import ...
- xbox360 双65厚机自制系统无硬盘 U盘玩游戏方法
因为没有硬盘,又没有光盘.所以想把游戏放在U盘里面.用U盘来做为硬盘玩游戏. 现有的自制系统主要是FSD,但是FSD要用硬盘才能安装,理论上U盘也可以,但是我没有尝试了. 这里介绍的是玩xex格式的游 ...
- unity, Animator.ResetTrigger
解: 正确的写法应该是:Animator.SetTrigger("unfoldTrigger")Animator.ResetTrigger("unfoldTrigger& ...
- Hadoop 读取文件API报错
Exception in thread "main" org.apache.hadoop.hdfs.BlockMissingException: Could not obtain ...
- 怎么运行 ASP.NET Core控制台程序
aspnet test.dll
- 查询系统负载信息 Linux 命令详解
linux uptime命令主要用于获取主机运行时间和查询linux系统负载等信息.uptime命令过去只显示系统运行多久.现在,可以显示系统已经运行了多长 时间,信息显示依次为:现在时间.系统已经运 ...