Unity 修改UnityEditor.DLL
1:起因
大部分情况下是不需要修改unity的dll的,因为实力不允许,不bb了,我的unity版本2017.4.25
unity 2017推出spriteAtlas 新的图集方式,但是每次创建了新的spriteAtlas要自己找需要打图集的文件(文件夹)
我想的就是 在我点这个“+”号的时候直接就把我需要打图集的文件夹全部打进去,如下图
更或者 直接把我选中的对应sprite打包进去(这个我搞不定)
于是我就想写个编辑器脚本,想着unity肯定是有这方面的接口,结果我查了api,没有!!!!!!!!
不是真的没有,是我这个版本没有,2018.1也没有 我查了2018.3有这个接口
2017里面using Unityeditor.U2D 都是不存在的。
2:方案
unity开源了C#代码 然后我就想能不能直接修改一下 点击“+”号 修改一下那个字段,然后下载了对应的源代码,查看里面的代码
就是这里了 ,然后我修改了一下
代码解释:AssetDatabase.GetAssetPath(Selection.objects[0])获取第一个文件路径
System.IO.Directory.GetParent().name 获取文件路径的上级文件夹名称
然后 我就天真的以为直接把编译生成UnityEditor.dll替换一下unity 里面的UnityEditor.dll 就可以了 ,可是当我打开unity的时候,有问题。就是有问题!!! 如果你们没问题 给我说下
然后怎么办呢???
3:终极解决方案
最后我用ILSpy 打开unity本身的UnityEditor.dll(路径:Unity\Editor\Data\Managed)
md 明明就有,为什么不让我们用哦 (ILSpy 不能直接修改dll),我就想改一行代码就行了,咋就这么难。但是一般程序员有个毛病就是,我都知道怎么搞了,难道就想这样放弃嘛 不不不 不可能 。
然后就网上找了修改dll的方法,发现可行,也没搞过,打算试试
1:工欲善其事必先利其器:
首先找到两个工具(1):ildasm.exe:这个是把DLL生成IL文件的一个软件
(2):ilasm.exe:这个是把IL文件重新生成DLL的功能
2:生成IL
打开这个软件,把unity下的UnityEditro.dll复制一份出来,然后用ildasm打开,打开也看不懂,直接就保存一下吧
命名:normal 代表这个是正常的
然后呢,我们把下载的c#源代码也编译一下
然后把这个dll 也像刚才一样用ildasm编译成IL语言(为什么这么做 ,因为我不懂IL,直接修改IL是不可能的,只能通过两个文件对比看修改的地方)
然后打开两个IL 进行对比(直接用记事本打开就行,直接查找方法名AddPackable)
就是这里了,然后我将这一部分IL copy到normal.IL
保存
3:编译成DLL
然后就是把这个修改过的normal.IL编译成DLL了
利用ilasm.exe,添加命令 ilasm.exe /dll/resource=normal.res normal.il,然后按下回车
你就看到刷拉刷拉的的最后在你的文件夹下面出现了一个normal.dll
好接着,把这个dll重命名UnityEditor.dll,然后拷贝到unity的Data\Managed文件夹下面。ok 然后再打开unity
发现没有报错,接着我们,试试效果
例如我们要把这个文件夹整个打图集,在此目录建立一个图集
OK 完结撒花!!!纯属蛋疼 2018.3可以自己写编辑器脚本添加了。不过可以学习这个修改dll 再编译回去的方法!!!
两个工具地址:ilasm ildasm
链接: https://pan.baidu.com/s/18KTRcza1lP8cZ0f7CjNB_g 提取码: xabb
本来上传到csdn 但是积分要5分 还没法修改。。。。。我真tmd,,,,
Unity 修改UnityEditor.DLL相关推荐
- Mono.Cecil使用示例之使指定程序集成为UnityEditor.dll的友元程序集
Mono.Cecil使用示例之使指定程序集成为UnityEditor.dll的友元程序集 Mono.Cecil是一个开源的库,使用Mono.Cecil可以非常方便的在代码中修改C#程序集.在Unity ...
- Unity调用动态链接库dll和so
[001]Unity调用动态链接库dll和so ApolloAR https://www.jianshu.com/p/f37bb72979a1 一.PC平台 (注:环境 VS2017+Unity20 ...
- Unity修改批量修改名字工具
Unity修改批量修改名字工具 using System.Collections; using System.Collections.Generic; using UnityEngine; using ...
- Unity编辑器UnityEditor基础(二)
Unity编辑器UnityEditor基础(二) 终极目标 利用学到的东西制作自己的工具(自定义的窗口.Inspector.菜单.插件等等). 准备工作 还是使用上一篇的 Unity 工程,然后在 S ...
- unity修改飞行数据_数据预测和文化,或者我如何在没有飞行汽车的情况下学会生活...
unity修改飞行数据 Two and a half thousand years ago, the ancient Greeks used to visit a temple in Delphi t ...
- unity 修改Mono反破解加密Assembly-CSharp.dll
解密无非就为了 修改游戏功能数据.提取游戏资源.加入自己想加的广告... 加密就是保护游戏不被恶意修改,我经常看到有人说:"加什么密,你以为自己写的代码很NB?见不得人?". 我只 ...
- 反编译DLL并修改再生成DLL
一. 用到的工具: 1:反编译工具ILSpy.exe:是个很不错的反编译软件,而且是免费了: 2:微软的工具ildasm.exe:这个是把DLL生成IL文件的一个软件,是微软自带了:可以在C:\Pro ...
- Unity——用UnityEditor拷贝FBX中的AnimationClip
最近有个新需求,要用代码添加动画的事件,但是Unity不能直接修改FBX中的AnimationClip 在Animation窗口中可以看到,AnimationClip是Read-Only状态,用代码修 ...
- VS封装给Unity使用的DLL
首先: 注意两点,一个是选择3.5,Unity最高支持到3.5 然后要选择第二个FrameWork类库 第一个会报错 然后导入Unity dll 我Unity安装在F:\AppLicationW ...
最新文章
- 设计模式------工厂方法模式
- P2709 小B的询问
- Java并发编程:线程的生命周期是个怎样的过程?
- 菲涅尔效应(Fresnel Effect)
- 【3】测试用例设计-因果图
- 图像处理实战-Python编程进阶
- docker安装JDK
- windows系统常用运行命令大全
- TCP/IP,Linux下多进程编程,进程复制函数fork,双返回值函数,通过父进程复制一份代码相同的子进程,父子进程执行顺序由调度算法决定,代码中获取进程执行用户的函数,数据共享状态
- 利用C语言实现wol网络远程唤醒
- 微软遥测服务服务器,使用 .REST 配置 Azure 媒体服务遥测 | Microsoft Docs
- 拍好人像的六个好招数
- 凯文·凯利:个人数据才是大未来
- java的标示符规则与名称命名规范
- 快问快答,MySQL面试夺命20问
- jQuery 实现动态粒子特效,太美了!!!
- windowxp网络无法发现其他计算机,几个步骤轻松解决win7无法访问XP系统共享问题...
- zk4元年拆解_科比zk4复刻拆解测评 zk4复刻配置和元年区别是什么
- BigBrother的大数据之旅 Day 4 Linux(4)
- linux安装及启动nsq流程