Unity3D编辑器扩展1——批量处理资源
前言
最近一段时间正在学习Unity的编辑器扩展方面的内容,因此想把所学到的知识以一种方式记录下来。有可能有很多不足的地方,甚至有错误的地方,请大佬们多多提供帮助。
什么是编辑器扩展
先说说什么是编辑器扩展。
通俗来说,编辑器扩展就是在原有的Unity编辑界面中添加各种各样的自定义功能,以达到自己想要的目的。
比如,我想在Unity菜单栏下添加一个按钮来实现删除所有图片资源。这就需要用到编辑器扩展。
这种编辑器扩展的代码跟普通挂在物体上的脚本不同,它需要放在Assets/Editor文件夹下。放在Editor文件夹下的代码,Unity自动默认为工具类代码(也就是在开发的时候帮助我们的工具“人”),在生成最终版本的时候是不会把这里面的文件打包进去的。
可能有小伙伴想问了:为什么第一节直接从批量处理资源开始呢?
因为我正好在学这个地方,其他的内容会在后续文章中补充。
最关键一步
要使用编辑器扩展,首先得用UnityEditor。有些情况下,需要对系统文件进行操作,所以有时候需要用System.IO。
using UnityEditor;
using System.IO;
获得路径下的资源文件
我们要批量处理资源,首先就得获得资源。
假设我们要获取某文件夹下面的所有资源,先得得到文件夹的路径path。(如Assets/Resources)
DirectoryInfo directoryInfo = new DirectoryInfo(path);//获得文件夹的info
FileSystemInfo[] fileSystemInfos = directoryInfo.GetFileSystemInfos();//获得文件夹中文件的info
这样我们就获得了该文件夹下的所有文件信息。这些文件有些是文件,有些可能是文件夹。因为我们希望彻底地遍历所有的文件,所以当我们遇到文件夹的时候需要再进一步递归该文件夹。
foreach (FileSystemInfo item in fileSystemInfos)//FullName从D:盘开始(即地址),Name就是文件名(即名称)。
{if (item is DirectoryInfo)//如果是文件夹{FindAssets(item.FullName);//递归调用该方法}else//如果不是文件夹,即如果是文件{if(!item.Name.EndsWith(".meta"))//每个资源都会有个对应的.meta文件,存储资源的ImportSetting{string importerPath = "Assets" + item.FullName.Substring(Application.dataPath.Length);//获得从Assets开始的资源路径AssetImporter assetImporter = AssetImporter.GetAtPath(importerPath);//通过上面的资源路径获得资源文件//TODO,这里已经获得了资源文件,想对资源文件进行什么操作都可以了}}
}
这时我们就以AssetImporter的形式获得了所有的资源文件。
如果我们想对其进行设置修改,我们可以将其转化为各种类型的Importer从而修改其属性。如模型文件为ModelImporter、图片文件为TextureImporter、音频文件为AudioImporter等。
最后一步
上面都是批量处理资源的方法。
所编辑器扩展,在于把功能添加到编辑器上。
很简单又很关键的一行代码就是:
[MenuItem("Tools/获取我的资源")]
这个是Unity内置的一种特性,使用了之后会在Unity菜单栏下创建该按钮。点击该按钮后调用其对应的方法。
这里的Tools是菜单栏中没有的,因此这行代码会在Unity菜单栏下创建一个Tools菜单,Tools菜单下会有一个按钮叫“获取我i的资源”。点击后就会调用之前我们写的方法。
小结
这是简单的批量获取资源的方法之一。因为本人也还在学习过程中,所以肯定有很多地方考虑不全,以及会有很多错误。希望有大佬看到能够及时指出,我会立刻进行改正,帮助我自己和大家共同进步!
有问题的小伙伴们可以在下方留言,大家可以一起讨论。
(吐槽:Markdown格式终于像模像样了…)
Unity3D编辑器扩展1——批量处理资源相关推荐
- 【Unity3D编辑器扩展】Unity3D中实现Text的字体的替换
推荐阅读 CSDN主页 GitHub开源地址 Unity3D插件分享 简书地址 我的个人博客 大家好,我是佛系工程师☆恬静的小魔龙☆,不定时更新Unity开发技巧,觉得有用记得一键三连哦. 一.前言 ...
- unity3D编辑器扩展
编辑器扩展只是在编辑项目中运行,发布出来是不会运行的. 固定创建一个文件夹Editor:所有的资源或者代码都不会被打包进去. 01.使用MenuItem添加菜单栏按钮 脚本不需要作为组件存在,可以不用 ...
- Unity3D编辑器扩展--自定义创建圆锥体
前言 这几天琢磨着开发个个人作品的时候,发现原来Unity3D官方没有提供圆锥体的创建功能,就自己做了个编辑器扩展.鉴于之前搜索Mesh编程的时候很少有博客把自己的算法讲清楚,这里我抛砖引玉,尽我所能 ...
- Unity3D 编辑器扩展 跳转显示指定目录
做编辑器扩展开发时,假如我们生成一个文件到Assets之外的目录,要查看它的时候,需要从系统路径一步步打开到那个目录. Unity给我们提供了一个API可以直接打开指定目录,类似Project窗口右键 ...
- 【Unity3D编辑器扩展】Unity3D中实现UI界面控制,UI界面的显示和隐藏实现
推荐阅读 CSDN主页 GitHub开源地址 Unity3D插件分享 简书地址 我的个人博客 QQ群:1040082875 大家好,我是佛系工程师☆恬静的小魔龙☆,不定时更新Unity开发技巧,觉得有 ...
- unity3D 编辑器扩展,设置应用图标
Unity 2018的Android平台Icon怎样设置,自己打开Unity去看下: File->Build Settings->Player Settings->android 平 ...
- 扩展Unity3d编辑器,批量修改Label字体颜色
在做游戏使用NGUI过程中,经常会遇到更改UILabel字体的颜色,手动更改Label字体颜色不仅效率很低,而且有部分Label处于未激活状态,无法找到全部Label.为此需要扩展Unity3d编辑器 ...
- Unity3D使用经验总结 编辑器扩展篇【转】
一个引擎,最重要的就是工具,工具除了提升开发速度,提供可视化操作环境以外,还带了容错功能. 它使得大家的工作局限在一定的范围内,比如一个变量的配置,或者是一些类型的选择. 使用编辑器,使得既使不太明白 ...
- Unity3D Editor 编辑器扩展3 Editor脚本
Unity3D Editor 编辑器扩展3 Editor脚本 环境:Unity2017.2 语言:C# 总起: 在编辑Unity项目的时候,总不可能避免的接触到Unity自身自带的Inspector参 ...
最新文章
- poj1419 Graph Coloring 最大独立集(最大团)
- css怎样使弹跳的小球旋转,如何使用纯CSS实现小球跳跃台阶的动画效果(附源码)...
- Android小知识10则(上)(2018.8重编版)
- Java原始客户端操作Mongodb 增删改查
- mysql中show status介绍一
- Android O后台服务限制总结
- (学习日记)裘宗燕:C/C++ 语言中的表达式求值
- Android的Matrix 2
- IPC进程间通信/跨进程通信
- usb计算机连接 灰色,USB调试选项显示为灰色
- 生成万花筒效果并截图
- 现在时间是 a 点 b 分,请问 t 分钟后,是几点几分?
- android中服务播放音乐,android中用Service播放音乐
- 滴滴APM工具Dokit
- GitHub 下载神器强势回归!
- 电脑的任务栏只显示一条杠,没有图标怎么解决,看这里!!!
- 防火墙单个ip映射多台服务器,使用防火墙构建器管理多个服务器的单个防火墙策略...
- ITOP-1 Docker安装部署itop
- react 中 JSX 语法的转化过程
- php源码 微信企业号,查看“微信支付”的源代码