NGUI里没有变亮的效果,通过着色只会变暗,那么怎么办呢,变亮的效果不仅可以用在按钮上,还可以用于某些控件的闪光等等。下面,我们开始征程吧! 第〇种办法,用UIImageButton。好吧,太弱智了,当我没说。Image Button不知道大家用的多不多,反正我是不用的,毕竟多了一到两倍的图量。用Image Button嘛,就无所谓是变亮还是怎么了,按下后图都不一样了,那想怎么变就怎么变。 第一种办法,还是用UIButton(或者UIButtonColor),将按钮原本就做的亮一些,也就是做一个按下状态的按钮,按钮的静息状态着上色变暗,这样的效果就是静息状态略暗,按下后恢复图片原本的亮状态。为了方便创建,要更改一下各颜色的默认值,在UICreateWidgetWizard.cs里修改源代码即可,具体将会在第二种办法里学会。 美术说,按钮绝大部分时间是静息状态,他们无法直接制作静息状态的图片,会使最终效果难以把握,所以又有了另一种办法。 第二种办法,修改Shader! 我们知道,控件(UIWidget)的着色是用一个颜色值“按分量乘”上原有的贴图颜色,颜色值Color是一个每个分量都在0~1范围的四维向量,那么乘上一个0~1的数必然不会变大,所以着色只能变暗。那么要如何变亮呢?只需在乘上颜色值之后再乘一个2,就可以变亮到两倍了。 这种方法需要修改Shader。找到通常使用的Unlit/Transparent Colored无光照透明着色Shader,Ctrl+D复制一份,名字改为Unlit/Transparent Colored Double,暂时就这么起名吧。双击打开。第一行是名称,也是在unity中选择Shader下拉菜单里的位置,所以改成:
[C#]
纯文本查看
复制代码
再找到最后的SetTexture [_MainTex]方法,加一个DOUBLE:
[C#]
纯文本查看
复制代码
保存。 下面是使用这个Shader。 在Project里找到你的UIAtlas的Prefab物体,同时也可找到它对应的Material和Texture2D。选中Material,将Shader改为刚做的Double Shader,这时场景里所有用到这个Atlas的控件全都亮瞎了狗眼。 接下来就要改变默认状态的着色了,也就是UIWidget.color通通改为new Color(0.5f,0.5f,0.5f,1)(Color.white*0.5f会使alpha变为0.5,影响不大但不太好)。 对于已经制作好的控件,可以手改,当然应该写脚本批量改。对于新制作的控件,我们改一下Wizard和默认值。 先做后者。找到UICreateWidgetWizard类,其中定义了一连串的局部静态变量(m为前缀的),有一个static Color mColor = Color.white;改成:
[C#]
纯文本查看
复制代码
[C#]
纯文本查看
复制代码
UIWidget类,修改默认颜色:
[C#]
纯文本查看
复制代码
这样基本上OK了。 再来改工程里已有的控件。写一个如下的EditorWindow:
[C#]
纯文本查看
复制代码
保存脚本回到Unity,菜单栏的Window>Batch Widget Operator打开这个修改器,可以修改路径,注意Project里的东西都在Assets/下,点击那个按钮,一会儿工夫会log出修改了多少个Sprites,此时工程里所有的UISprite及其派生类就都被修改好了,当然有些会改错,所以还得每个界面测试一下以防万一。 另外,如果用了Asset Server的话自然可以在Asset Server上备份。这个脚本的操作可以看出来是不可逆,不可重复的,所以,不敢用就先备份吧。 对于场景里的,可以用Selection.gameObjects,即选中的物体,来遍历所有UISprite,详见Unity文档。我不贴出来是因为我没有在场景里直接放置任何控件,以后我会长文说明为什么场景里不要放东西,什么是Unity下的MVC。 以后我工作中遇到的东西都发表出来给大家共享咯! 效果图: |
NGUI里没有变亮的效果
最新推荐文章于 2024-01-31 15:26:07 发布