NGUI Material Shader SetFloat 不起作用
通常情况下,我们在Unity3d种可以通过material.SetFloat(name, xxx) 修改参数来达到我们的Material[Shader]的效果.
但是在 NGUI 的UITexture中,除了初始化时调用可以生效之外, 在Update或其他地方修改参数均不起效.
其原因是 NGUI 已经将calldraw作了缓存(没细查),我们可以在设置后调用 RemoveFromPanel 和 SetDirty 来进行重建:
实例:
void SetFloat(UITexture t, string name, float v)
{
var m = t.material;
m.SetFloat(name, v);
t.RemoveFromPanel();
t.SetDirty();
}
当然这会导致 Panel重建,慎用.
更新:这个问题真的是误人子弟了... 以下更新下正常的使用方法:
public UITexture tex;
void Start(){
tex.onRender += mat =>{
mat.SetFloat("key", 0.5f);
};
}
首先得明白NGUI 的原理, NGUI 因为图片与图片之间通过 设置 Depth 来确定图片的绘制顺序,并不能单纯使用z轴来设定.
所以NGUI内部有自己渲染排序方式.具体查看:
NGUI的流光shader解决方案
.以下为部分摘录
NGUI的onRender 大家可能会奇怪,上面的代码中的onRender什么鬼,我直接在脚本内部,起个定时器什么的来修改shader的参数不就行了吗。有兴趣的同学可以尝试一下,不管用的。 这个问题一开始我也遇到了,google一下,原来这和NGUI的渲染机制有关。大概解释一下:
NGUI在渲染的时候,大家都知道,会合并DrawCall,合并的必然是使用同一材质球的元素,NGUI内部会新建一个Material,然后UIDrawCall会进行一次渲染,渲染的时候就会调用onRender这个回调,并且把这个新建的Material传过来,方便我们做一些自定义的操作
看看UIWidget中的onRender定义大家也就都明白了:
/// <summary>
/// Set the callback that will be triggered when the widget is being rendered (OnWillRenderObject).
/// This is where you would set material properties and shader values.
/// </summary> public UIDrawCall.OnRenderCallback onRender
{
...
}
NGUI Material Shader SetFloat 不起作用的更多相关文章
- NGUI出现Shader wants normals, but the mesh UIAtlas doesn't have them
NGUI出现Shader wants normals, but the mesh UIAtlas doesn't have them,没有网格法线,打开UI Root上 UIPanel组建上的 Nor ...
- NGUI 修改Shader支持灰色滤镜
之前有人做过,不过效率不高: http://blog.csdn.net/onerain88/article/details/12197277 他的代码: fixed4 frag (v2f i) : ...
- 关于NGUI Shader 和 Draw Call的优化 & 模糊shader
序: 1.项目过程中不可避免的需要用到大量Shader 和 UITexture,由于Ngui对Shader支持非常糟糕,导致项目drawCall异常的高 2.Panel裁剪无法裁剪自定义shader内 ...
- 【浅墨Unity3D Shader编程】之一 夏威夷篇:游戏场景的创建 & 第一个Shader的书写
本系列文章由@浅墨_毛星云 出品,转载请注明出处. 文章链接:http://blog.csdn.net/poem_qianmo/article/details/40723789 作者:毛星云(浅墨) ...
- NGUI图片闪光
先上效果 Shader Shader "Unlit/Transparent Colored Flow Texture" { Properties { _MainTex (" ...
- 【淡墨Unity3D Shader计划】一间 创建一个游戏场景 & 第一Shader写作
本系列文章由@浅墨_毛星云 出品.转载请注明出处. 文章链接:http://blog.csdn.net/poem_qianmo/article/details/40723789 作者:毛星云(浅墨) ...
- 【浅墨Unity3D Shader编程】之中的一个 夏威夷篇:游戏场景的创建 & 第一个Shader的书写
本系列文章由@浅墨_毛星云 出品.转载请注明出处. 文章链接:http://blog.csdn.net/poem_qianmo/article/details/40723789 作者:毛星云(浅墨) ...
- NGUI 层级关系控制
NGUI元素的遮挡情况是不依赖空间关系,所以在NGUI上添加特效有时候特别蛋疼,特别是美术同学还要依赖空间关系来控制特效效果,那先看看看NGUI的层级是怎么处理的,不过下面的描述都是针对单个相机下的P ...
- [cb]NGUI组件基类之 UIWidget
UIWidget NGUI的UIWidget是所有组件的基类,它承担了存储显示内容,颜色调配,显示深度,显示位置,显示大小,显示角度,显示的多边形形状,归属哪个UIPanel.这就是UIWidget所 ...
随机推荐
- log4net的各种Appender配置示例
Apache log4net™ Config Examples Overview This document presents example configurations for the built ...
- 对 clear:both 这个样式的一些理解
看下我今天一直研究的两个例子吧.希望对自己跟大家有帮助: 例子一: <!DOCTYPE html> <html> <head lang="en"> ...
- ZipFile解压文件不改变压缩包内文件修改日期的方法
本文参考http://stackoverflow.com/questions/9813243/extract-files-from-zip-file-and-retain-mod-date-pytho ...
- dfs 翻棋盘end
#include<iostream> char data[16]; int a[16]; int d[4] = { -4, 1, 4, -1 }; char b[16]; int flag ...
- Linux内核开机保留大块内存的方法
http://www.linuxidc.com/Linux/2014-03/97952.htm
- MySql 数据库导入到 SQL Service
1.下载安装ODBC驱动程序 地址:http://dev.mysql.com/downloads/connector/odbc/ 注意:系统的版本问题( 我的是64位的win7系统,但是SQL Ser ...
- centos 安装 nginx
采用版本 nginx-1.9.8.tar.gz yum -y install pcre-devel yum -y install openssl openssl-devel tar –zxvf ngi ...
- centos分区
/boot :用来存放与 Linux 系统启动有关的程序,比如启动引导装载程序等,建议大小为 100MB . /usr :用来存放 Linux 系统中的应用程序,其相关数据较多,建议大于 3GB 以上 ...
- Python——函数的命名关键字参数
命名关键字参数 对于关键字参数,函数的调用者可以传入任意不受限制的关键字参数.至于到底传入了哪些,就需要在函数内部通过kw检查. 仍以person()函数为例,我们希望检查是否有city和job参数: ...
- 关于16年2月14日以后上传AppStore出现:Missing iOS Distribution signing identity for...的问题
2016年2月14日以后打包上传AppStore会发现出现如下的问题: 导致问题的原因是:下边这个证书过期了 以下是苹果官方给出的回应: Thanks for bringing this to the ...