前言

最近一段时间正在学习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——批量处理资源相关推荐

  1. 【Unity3D编辑器扩展】Unity3D中实现Text的字体的替换

    推荐阅读 CSDN主页 GitHub开源地址 Unity3D插件分享 简书地址 我的个人博客 大家好,我是佛系工程师☆恬静的小魔龙☆,不定时更新Unity开发技巧,觉得有用记得一键三连哦. 一.前言 ...

  2. unity3D编辑器扩展

    编辑器扩展只是在编辑项目中运行,发布出来是不会运行的. 固定创建一个文件夹Editor:所有的资源或者代码都不会被打包进去. 01.使用MenuItem添加菜单栏按钮 脚本不需要作为组件存在,可以不用 ...

  3. Unity3D编辑器扩展--自定义创建圆锥体

    前言 这几天琢磨着开发个个人作品的时候,发现原来Unity3D官方没有提供圆锥体的创建功能,就自己做了个编辑器扩展.鉴于之前搜索Mesh编程的时候很少有博客把自己的算法讲清楚,这里我抛砖引玉,尽我所能 ...

  4. Unity3D 编辑器扩展 跳转显示指定目录

    做编辑器扩展开发时,假如我们生成一个文件到Assets之外的目录,要查看它的时候,需要从系统路径一步步打开到那个目录. Unity给我们提供了一个API可以直接打开指定目录,类似Project窗口右键 ...

  5. 【Unity3D编辑器扩展】Unity3D中实现UI界面控制,UI界面的显示和隐藏实现

    推荐阅读 CSDN主页 GitHub开源地址 Unity3D插件分享 简书地址 我的个人博客 QQ群:1040082875 大家好,我是佛系工程师☆恬静的小魔龙☆,不定时更新Unity开发技巧,觉得有 ...

  6. unity3D 编辑器扩展,设置应用图标

    Unity 2018的Android平台Icon怎样设置,自己打开Unity去看下: File->Build Settings->Player Settings->android 平 ...

  7. 扩展Unity3d编辑器,批量修改Label字体颜色

    在做游戏使用NGUI过程中,经常会遇到更改UILabel字体的颜色,手动更改Label字体颜色不仅效率很低,而且有部分Label处于未激活状态,无法找到全部Label.为此需要扩展Unity3d编辑器 ...

  8. Unity3D使用经验总结 编辑器扩展篇【转】

    一个引擎,最重要的就是工具,工具除了提升开发速度,提供可视化操作环境以外,还带了容错功能. 它使得大家的工作局限在一定的范围内,比如一个变量的配置,或者是一些类型的选择. 使用编辑器,使得既使不太明白 ...

  9. Unity3D Editor 编辑器扩展3 Editor脚本

    Unity3D Editor 编辑器扩展3 Editor脚本 环境:Unity2017.2 语言:C# 总起: 在编辑Unity项目的时候,总不可能避免的接触到Unity自身自带的Inspector参 ...

最新文章

  1. poj1419 Graph Coloring 最大独立集(最大团)
  2. css怎样使弹跳的小球旋转,如何使用纯CSS实现小球跳跃台阶的动画效果(附源码)...
  3. Android小知识10则(上)(2018.8重编版)
  4. Java原始客户端操作Mongodb 增删改查
  5. mysql中show status介绍一
  6. Android O后台服务限制总结
  7. (学习日记)裘宗燕:C/C++ 语言中的表达式求值
  8. Android的Matrix 2
  9. IPC进程间通信/跨进程通信
  10. usb计算机连接 灰色,USB调试选项显示为灰色
  11. 生成万花筒效果并截图
  12. 现在时间是 a 点 b 分,请问 t 分钟后,是几点几分?
  13. android中服务播放音乐,android中用Service播放音乐
  14. 滴滴APM工具Dokit
  15. GitHub 下载神器强势回归!
  16. 电脑的任务栏只显示一条杠,没有图标怎么解决,看这里!!!
  17. 防火墙单个ip映射多台服务器,使用防火墙构建器管理多个服务器的单个防火墙策略...
  18. ITOP-1 Docker安装部署itop
  19. react 中 JSX 语法的转化过程
  20. php源码 微信企业号,查看“微信支付”的源代码

热门文章

  1. PacketiX ××× 3.0在Windows Server服务器NT配置步骤
  2. markersize
  3. 朋友圈广告代理政策与服务亮点
  4. 微信转发或分享朋友圈带缩略图、标题和描述的实现方法
  5. 从影评的角度看《后来的我们》
  6. 单机版加密狗/锁与网络版加密狗/锁的区别
  7. Python中*args和**kwargs的使用方法
  8. J2EE基础集合框架之Set
  9. 分享pdf转换jpg格式的方法
  10. SUSE系统添加开机自启项