也可以看知乎 https://zhuanlan.zhihu.com/p/394910141
Unity GUI的一些使用
https://www.codenong.com/cs106864188/https://www.codenong.com/cs106864188/
Begin/EndChangeCheck 就是检查被包围的代码的参数是否有变化,有变化才执行。
所以如果涉及到开启A关闭B的二选一功能,可以写进End的检测里
showMixedValue 就是当选中多个材质球的时候一起编辑有用
学习
参考网站:
https://blog.csdn.net/enk_2/article/details/109236874
GUI分为两种,一种是Drawer一种是GUI,当然可以把GUI集成后用Drawer的形式写。
Drawer就是:
可以看喵爷的https://zhuanlan.zhihu.com/p/93194054
1 | [Header(Option)] |
GUI就是:
1 | CustomEditor "XXX" |
这里主要说的是GUI,因为Drawer有很多限制,例如修改RenderType的时候就很麻烦。
说回GUI
大部分GUI继承的类分为两个 : ShaderGUI& BaseShaderGUI
前者是自己造轮子,后者是根据前者的基础上造好了一些轮子(如果是在Lit基础上魔改的,用BaseShaderGUI方便一些)
参考默认shader的时候会发现CustomEditor里面是一个namespace,所以其实也可以写成CustomEditor “namespace.name”的形式
具体如何写
https://blog.csdn.net/enk_2/article/details/109236874
这里先提供一个模板
基本都做好注释了,对着部分抄就行
如何抄作业
假设需要这种效果
首先找到 BaseShaderGUI.cs
打开发现第一行就是想要的
这里值需要拷贝需要的枚举到 XXX 中
接着抄,找 SurfaceType 用到的地方
往下翻
他写进 DrawSurfaceOptions 的函数里了,咱们可以自定义一个标签写进去,例如在 XXX 中这样写
报错了,首先是一些函数没放进来,例如 DoPopup,所以先搜一下这个
这些都打包带走(图里没截全)
剩下的找到对应的属性抄过来,他是写进Styles里了,咱们没写,就把 “Styles.”去掉
这个需要在shader里写对应的变量,直接隐藏就可以
材质需要换成自己的
抄完之后记得吧 BlendMode 运算的函数放到 OnGUI里面
也可以混着用
不过只能在shader里隐藏不需要的属性
- 枚举展开列表
首先
踩坑
- 开关里不能用 setfloat 函数(我也忘了为啥)
- 可以用HasProperty来区分不同shader
例如我在lighting里改了,我可以查当前shader是否有某个参数,以此来区分不同GUI