这几天在看Unity GUI的相关东西,由于简单看了一下UGUI的用法,发现遇到一些问题,比如在上篇文章里面用Scroll View做滚动条的时候,如果没有发现Content Size Fitter组件,我估计就认为这是UGUI不完善的地方,需要自己写代码进行Content的大小的适配来适应滚动。所以萌生出一个想法,能不能有个地方能看到所有Unity关于UI方面公开出来的组件与工具?只要大概了解unity提供了哪些UI组件与工具,拿来用就是了,不需要自己重复造轮子了。于是开始在网上搜索,结果可想而知,除了unity官方的文档,其他资料很少。转念一想,unity ui不是开源的吗?找到源码不就能找到各种类与组件和工具,还能学习下人家的设计思路与写法。于是bing了一下,果然,unity在bitbucket上开源了各个unity版本的UI源码,地址是:https://bitbucket.org/Unity-Technologies/ui/downloads?tab=tags,于是下载了5.3.4的版本的UI源码,直接拿VS2015打开,VS里面是如下结构:
UnityEditor.UI工程生成Editor/UnityEditor.UI.dll,主要包含各UGUI控件在Editor的Inspector功能。
UnityEngine.UI工程生成Standalone/UnityEngine.UI.dll,主要是UGUI在发布包中使用的功能。
UnityEngine.UI-Editor工程生成UnityEngine.UI.dll.主要是UGUI在编辑器中使用的功能。
然后编译生成解决方案,在Output文件夹下面得到如下文件:
然后把这些文件直接覆盖unity安装路径下\Editor\Data\UnityExtensions\Unity\GUISystem的文件(PS:建议备份原有文件夹,copy出来一份,目录下面的.xml文件千万别删了)。
这时,在UGUI源码里面添加的方法属性和自己加的输出信息都能正确调用和打印了。
但是如何debug到UnityEngine.UI.dll内部呢?
可以在Unity里面用VS打开Unity工程代码,然后把UnityEngine.UI工程添加进来,完成之后的效果如下图:
调试时效果如下图:
TestButtonFunc是在Button类里面新加的方法,F11调试的时候代码跟踪过来了。这样就可以查看UGUI到底做了什么事了。不过这里只有UI的源码,无法跟踪到最底层。
——————————————————————————————————————————————————————————————————————
分割线之后想说一下,我这里是用VS调试的,有同学想用Mono来调试怎么办呢?我看到有同学说mono调试需要.mdb文件,所以需要先得到mdb文件,刚开始我看着它的帖子在安装目录下面找到pdb2mdb.exe,然后运行根据dll生成mdb文件,但是出了一些引用错误,后来我尝试把这些引用的东西copy过来依然不好使,后来查了些资料有一国外友人说在某一地方可以单独下载pdb2mdb.exe,然后自己转mdb文件。
然而我本地并没装mono,想想还是算了,毕竟mono也用的不熟。于是我终止了继续下去。不过后来我一同事大牛来了一个神来之笔,他直接把ouput生成的内容拖到unity编辑器里面,然后经过编译,unity自动生成了.mdb文件,这样就不需要自己找什么工具转之类的麻烦事了,只是这个mdb到底是不是对的?mono下面是否可以调试了我都没有去尝试了。
附上用Mono调试那哥们的文章地址:http://forum.china.unity3d.com/thread-1134-1-1.html,给了我很多启发,多谢!
在附上关于pdb2mdb的外国牛人的帖子地址:https://forum.unity3d.com/threads/running-pdb2mdb-with-unity-5-and-later.390456/
pdb2mdb.exe在git上的地址:https://gist.github.com/jbevain/ba23149da8369e4a966f#file-pdb2mdb-exe
开始调试UGUI源码吧!
(PS:不得不吐槽一下csdn的审核与图片上传功能,难道不能弄一个自动程序处理审核?图片第一次上传直接就不给我显示?无语了)