关于NGUI中ScrollView使用自定义shader没有作用的解决方案
来源:互联网 发布:使用域名的好处 编辑:程序博客网 时间:2024/05/16 00:55
在NGUI的UIDrawCall.cs中有这么一段代码
void CreateMaterial (){mTextureClip = false;mLegacyShader = false;mClipCount = panel.clipCount;string shaderName = (mShader != null) ? mShader.name :((mMaterial != null) ? mMaterial.shader.name : "Unlit/Transparent Colored");// Figure out the normal shader's nameshaderName = shaderName.Replace("GUI/Text Shader", "Unlit/Text");if (shaderName.Length > 2){if (shaderName[shaderName.Length - 2] == ' '){int index = shaderName[shaderName.Length - 1];if (index > '0' && index <= '9') shaderName = shaderName.Substring(0, shaderName.Length - 2);}}if (shaderName.StartsWith("Hidden/"))shaderName = shaderName.Substring(7);// Legacy functionalityconst string soft = " (SoftClip)";shaderName = shaderName.Replace(soft, "");const string textureClip = " (TextureClip)";shaderName = shaderName.Replace(textureClip, "");if (panel.clipping == Clipping.TextureMask){mTextureClip = true;shader = Shader.Find("Hidden/" + shaderName + textureClip);}else if (mClipCount != 0){shader = Shader.Find("Hidden/" + shaderName + " " + mClipCount);if (shader == null) shader = Shader.Find(shaderName + " " + mClipCount);// Legacy functionalityif (shader == null && mClipCount == 1){mLegacyShader = true;shader = Shader.Find(shaderName + soft);}}else shader = Shader.Find(shaderName);
// Always fallback to the default shaderif (shader == null) shader = Shader.Find("Unlit/Transparent Colored");if (mMaterial != null){mDynamicMat = new Material(mMaterial);mDynamicMat.name = "[NGUI] " + mMaterial.name;mDynamicMat.hideFlags = HideFlags.DontSave | HideFlags.NotEditable;mDynamicMat.CopyPropertiesFromMaterial(mMaterial);#if !UNITY_FLASHstring[] keywords = mMaterial.shaderKeywords;for (int i = 0; i < keywords.Length; ++i)mDynamicMat.EnableKeyword(keywords[i]);#endif// If there is a valid shader, assign it to the custom materialif (shader != null){mDynamicMat.shader = shader;}else if (mClipCount != 0){Debug.LogError(shaderName + " shader doesn't have a clipped shader version for " + mClipCount + " clip regions");}}else{mDynamicMat = new Material(shader);mDynamicMat.name = "[NGUI] " + shader.name;mDynamicMat.hideFlags = HideFlags.DontSave | HideFlags.NotEditable;}}
当创建Scroll View后的panel数不为1,NGUI会使用其他的shader虽然在面板里显示的是同一个。但事实上用的并不是同一个。
解决方法:在NGUI的错误回滚之前判断先执行一遍查找shader是否存在。(可以理解为是不是使用自定义的shader)
KeyCode:
if (panel.clipping == Clipping.TextureMask){mTextureClip = true;shader = Shader.Find("Hidden/" + shaderName + textureClip);}else if (mClipCount != 0){shader = Shader.Find("Hidden/" + shaderName + " " + mClipCount);if (shader == null) shader = Shader.Find(shaderName + " " + mClipCount);// Legacy functionalityif (shader == null && mClipCount == 1){mLegacyShader = true;shader = Shader.Find(shaderName + soft);}}else shader = Shader.Find(shaderName);if(shader == null){shader = Shader.Find(shaderName);}// Always fallback to the default shaderif (shader == null) shader = Shader.Find("Unlit/Transparent Colored");
1 0
- 关于NGUI中ScrollView使用自定义shader没有作用的解决方案
- 关于NGUI中UITexture贴图自定义的shader文件在UISrollView中不报错的解决方案
- ngui中scrollview的使用
- NGUI ScrollView Panel一直都的解决方案
- NGUI的流光shader解决方案(一)(支持UITexture和使用图集的UISprite)
- NGUI的流光shader解决方案(二)(支持UITexture和使用图集的UISprite)
- NGUI中scrollview中的texture没有被clipped
- NGUI UIStretch自适应时 ScrollView使用panel滑动时出现问题的解决方案
- NGUI的ScrollView以及Grid的使用
- 关于ScrollView中嵌套Listview和GridView的解决方案
- [Shader]对NGUI的UISprite和UITexture进行裁剪(scrollview + 遮罩)
- NGUI:关于ScrollView的ResetPosition 不能用于UIWrapContent
- xna中使用自定义的shader来绘制model
- 【Unity Shader】NGUI中图标的灰化处理
- 使用NGUI实现带有放大功能的scrollview背包
- android ScrollView的内部控件的fill_parent没有作用 解决
- 我的第一篇博客--ScrollView中嵌套自定义ListView显示不全的解决方案
- cocos creator 中使用自定义shader
- Kafka使用Java客户端进行访问
- iconfont在线链接使用方法
- linux 查看硬件信息
- 罕见水星凌日直播,QQ物联携手腾讯云带你连接宇宙
- Javascript中对象的原型和对象的原型对象
- 关于NGUI中ScrollView使用自定义shader没有作用的解决方案
- 设计模式 装饰者模式 带你重回传奇世界
- git使用(一)
- Objective-C -- 字符串与数字互相转换
- MYSQL添加远程用户
- Android屏幕适配经验
- IOS 中说一个文件找不到或者说一个文件重复的时候
- android activity返回键被dialog屏蔽
- Protocol Stack in Wi-Fi Chipsets