u3d 灰度图image怎么把灰底去除

iOS 去掉导航栏的边界灰线;去掉搜索框的边界灰线和其中文本输入框的阴影
想要实现上面这种界面,一般都会显示的与预期的不一致,尽管我们设置的颜色是一样。通过下面的步骤就可以实现:
1.关闭navigationBar的透明度
self.navigationController.navigationBar.translucent = NO;
2.利用本机数码测色计,测出导航栏颜色的rgb,再次设置导航栏的颜色和下面view的背景颜色。
3.去除导航栏下面的灰色分割线
[self.navigationController.navigationBar setBackgroundImage:[[UIImage alloc]init] forBarMetrics:UIBarMetricsDefault];
[self.navigationController.navigationBar setShadowImage:[[UIImage alloc]init]];
去掉导航栏的边界灰线
[self.navigationController.navigationBar setBackgroundImage:[[UIImage alloc] init] forBarMetrics:UIBarMetricsDefault];
self.navigationController.navigationBar.shadowImage = [[UIImage alloc] init];
去掉搜索框的边界黑线
[self.mySearchBar setBackgroundImage:[[UIImage alloc] init]];
去掉搜索框的文本输入框的阴影
在stroryboard中:选中搜索框&&&右边in attribute inspector&&&View 在Tint的颜色栏中选择 clear color[image]10 我把电脑外壳拆了清灰尘然后启动就变这样了,怎么办_百度知道
[image]10 我把电脑外壳拆了清灰尘然后启动就变这样了,怎么办
[image]10 我把电脑外壳拆了清灰尘然后启动就变这样了,怎么办我怎样才能弄回跟之前一样?
我有更好的答案
可点第二项选优化设置保存重启
采纳率:71%
来自团队:
你是不是清理灰尘,扣掉了主板电池?只需要进入BISO,就是第三项从新设置开机启动项就可以搞定。这个只是BIOS掉电导致的设置丢失,恢复到了原来的样子。
我要怎样才能正常启动?选哪个?
找到你的硬盘设置从硬盘启动,如果没有读到硬盘,就需要检查一下你的硬盘SATA数据线和供电线。
你要进b|oS重设硬盘启动模式,选中AHCⅠ
我是想正常启动应该按哪个键
为您推荐:
其他类似问题
换一换
回答问题,赢新手礼包
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。Unity3D开发(一):NGUI Sprite效果变灰(按钮禁用状态)的解决方案
博主逛csdn有几年的时间了,但每每都是遇到问题时,来寻找解决方案的情况居多,并未开通过博客,也未发过任何文章,随着自己从网上得到的帮助越来越多,本着回馈与共同进步的想法,遂开通博客,并将自己在日常开发中遇到的问题记录下来,供广大网友们参考与讨论。
本人14年底因为项目需要随开始接触Unity3D引擎,博主一开始是用cocos2dx引擎开发手游,接触U3D后,发现确实U3D才是一套完整的手游开发解决方案,比起2dx上手也容易很多,加上NGUI,做游戏的UI确实比cocos2dx快了很多,因为博主身在一个创业公司,团队里面人手有限,因此现在项目的整个UI开发完全由博主一人承担,在此过程中确实遇到了很多问题,还好通过各种途径都解决了,我会在后期的博客中陆续将遇到的问题以及解决方案公布出来,供大家参考。
下面进入正题,因策划需求将无法点击的按钮以及一些可点击图标设置为禁用状态,即灰化,其实实现这个不算什么难事,最简单的就是让美术将所有需要灰化的图标出一份资源,然后程序动态换图就ok了。
然而这种解决方案最大的弊端就是,如果游戏内有大量需要灰化的图标,那么势必会导致最后包体变大,我们游戏正好就是此种情况,于是便选择了另一种解决方式,即通过程序写shader来解决此种问题。
在网上也查了一些文章,也有一些现成的shader例如这个shader
fixed4 frag (v2f i) : COLOR
if(i.color.r & 0.01 && i.color.g & 0.01 && i.color.b & 0.01 )
col = tex2D(_MainTex, i.texcoord);
float grey = dot(col.rgb, float3(0.299, 0.587, 0.114));
col.rgb = float3(grey, grey, grey);
col = tex2D(_MainTex, i.texcoord)* i.
这个shader就是在片段阶段时通过float grey = dot(col.rgb, float3(0.299, 0.587, 0.114)); 这句语句来实现灰化的,就是将顶点的像素与一个值进行点成,来影响每个顶点的像素来呈现出整体灰化的效果,这个shader最大的问题就在于外面的if判断,NGUI对每个Sprite的顶点进行渲染时,每次都要进行一次if else判断的话,会非常影响效率,尤其是如果你需要置灰的Sprite非常多的话,那么渲染就会非常耗时与影响效率,参考将Scrollview下放置超过100个Sprite再滑动,就可以大致了解了(这个问题在后期会给出解决方案)。
下面给出我的解决方案,首先先贴出我的shader:
Shader “UI/Sprite/Gray” {
Properties
_MainTex ("Base (RGB), Alpha (A)", 2D) = "black" {}
"Queue" = "Transparent"
"IgnoreProjector" = "True"
"RenderType" = "Transparent"
Lighting Off
ZWrite Off
Fog { Mode Off }
Offset -1, -1
Blend SrcAlpha OneMinusSrcAlpha
#pragma vertex vert
#pragma fragment frag
#include "UnityCG.cginc"
sampler2D _MainT
float4 _MainTex_ST;
struct appdata_t
float4 vertex : POSITION;
float2 texcoord : TEXCOORD0;
fixed4 color : COLOR;
struct v2f
float4 vertex : SV_POSITION;
half2 texcoord : TEXCOORD0;
fixed4 color : COLOR;
v2f vert (appdata_t v)
o.vertex = mul(UNITY_MATRIX_MVP, v.vertex);
o.texcoord = v.
o.color = v.
fixed4 frag (v2f i) : COLOR
col = tex2D(_MainTex, i.texcoord);
col.rgb = dot(col.rgb, fixed3(.222,.707,.071));
shader就不详细介绍了,以后会专门开个专题来讲讲shader,这个shader里面核心代码只有一句
col.rgb = dot(col.rgb, fixed3(.222,.707,.071));
其实跟网上的shader没什么区别,只是去掉了if else而已,这时有人可能会问了,你这样那我如何将sprite恢复成normal状态,别急,下面才是肉戏。我们知道NGUI的Sprite是通过图集来存储资源的,那么我如何来给单个Sprite换shader而又不影响图集里面其他的资源呢?就是通过动态给UISprite换材质的方法来实现,首先我们需要创建一个类,这里我创建了一个类叫XLSprite,它集成自UISprite,下面我将整个类贴上来:
using UnityE
using System.C
public class XLSprite : UISprite
protected GameObject panelObj =
protected Material GrayM
/// &summary&
/// ngui对Sprite进行渲染时候调用
/// &/summary&
/// &value&The material.&/value&
public override Material material
Material mat = base.
if (mat == null)
mat = (mAtlas != null) ? mAtlas.spriteMaterial :
if (GrayMaterial !=null)
return GrayM
/// &summary&
/// 调用此方法可将Sprite变灰
/// &/summary&
/// &value&The material.&/value&
public void SetGray()
Material mat = new Material (Shader.Find("UI/Sprite/Gray"));
mat.mainTexture = material.mainT
GrayMaterial =
RefreshPanel(gameObject);
/// &summary&
/// 隐藏按钮,setActive能不用尽量少用,效率问题。
/// &/summary&
/// &value&The material.&/value&
public void SetVisible(bool isVisible)
if (isVisible)
transform.localScale =
new Vector3(1,1,1);
transform.localScale = new Vector3(0,0,0);
/// &summary&
/// 将按钮置为禁止点击状态,false为禁用状态
/// &/summary&
/// &value&The material.&/value&
void SetEnabled(bool isEnabled)
if (isEnabled)
BoxCollider lisener = gameObject.GetComponent&BoxCollider& ();
if (lisener)
lisener.enabled =
SetNormal();
BoxCollider lisener = gameObject.GetComponent&BoxCollider& ();
if (lisener)
lisener.enabled =
SetGray();
/// &summary&
/// 将GrayMaterial置为null,此时会调用默认材质,刷新panel才会重绘Sprite
/// &/summary&
/// &value&The material.&/value&
public void SetNormal()
GrayMaterial =
RefreshPanel(gameObject);
///刷新panel,重绘Sprite
void RefreshPanel(GameObject go)
if (panelObj == null)
panelObj = NGUITools.FindInParents(go);
if (panelObj != null)
panelObj.enabled =
panelObj.enabled =
上面代码都有注释,就不多介绍了,注意material中的mat可能是私有变量,需要将其改为public。这样每次建立Sprite时候,直接添加XLSprite就ok,里面还有一些其他封装的方法,供大家参考,这里主要介绍下,如何实现的动态换材质,通过上面代码,大家可以大致看到是在SetGray()中,动态的创建了一个material并且赋值给Sprite,然后刷新panel时,在重绘这个Sprite时候,会调用material,这个时候,会返回我们创建好的GrayMaterial,在我们需要将Sprite恢复正常时候,仅需将我们的GrayMaterial置为null,就OK了。
下面是效果图
效果看来还是蛮ok的,今天就先介绍到这里,过段时间会介绍一下ScrollView下将按钮变灰的方法,上述方案只适用在非ScrollView下使用,在ScrollView下会出现变灰的Sprite无法正常遮罩的情况,那这种情况下具体的解决方案,会在下期的博客里讲解。
没有更多推荐了,
加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!新手求助,UGUI的按钮Disable不变灰。【unity3d吧】_百度贴吧
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&签到排名:今日本吧第个签到,本吧因你更精彩,明天继续来努力!
本吧签到人数:0成为超级会员,使用一键签到本月漏签0次!成为超级会员,赠送8张补签卡连续签到:天&&累计签到:天超级会员单次开通12个月以上,赠送连续签到卡3张
关注:87,065贴子:
新手求助,UGUI的按钮Disable不变灰。收藏
我用系统自带的UGUI弄了个按钮。但enabled =之后 按钮并不会变色。已经确认按钮不能按,Disabled Color已经是灰色,我甚至调成红色,无效。当按钮可按的时候 Pressed Color点击颜色 能正常显示。求助,这是怎么回事呢?
SiKi学院上有大量的项目案例课程,可以让学员随时随地学习!通过案例来从入门到深入的学习Unity!
自己顶一下
自己顶一下
楼主,你的问题我刚刚测试了一下也遇到了,解决方法是,不使用enable而是使用
不用膜拜我,我是测试帝
3Q~ 弄了好久了
6楼方法可行,我给你个思路吧,当你想对一个组件进行操作时,先看看它身上有什么属性,如果?你要的直接在脚本获取到,然后进行操作
登录百度帐号中设置UISprite图片灰显方法
做Unity开发过程中,有需求让未开启的功能模块的入口灰色显示。因为没有滤镜的概念,所以没flash那么方便。解决思路还是Shader,以前按网上其他帖子的方法,一直没有成功实现过。这两天比较闲一点,专门研究了下,总算成功了。
NGUI里已经有Unlit - Transparent Colored.shader。一般打Atlas的时候默认就是这个。如下图。![这里写图片描述]( frag (v2f IN) : COLOR
return tex2D(_MainTex, IN.texcoord) * IN.color
ENDCGog.csdn.net/10182)
上面就是Transparent Colored.shader内的核心颜色渲染代码,可见是没有灰色转换的功能的。我们这里需要使用另外个shader,也是NGUI自带的:Unlit - Transparent Colored Gray.shader,它的核心代码如下:
fixed4 frag (v2f IN) : COLOR
fixed4 col
if (IN.color.r & 0.001)
col = tex2D(_MainTex, IN.texcoord)
float grey = dot(col.rgb, float3(0.299, 0.587, 0.114))
col.rgb = float3(grey, grey, grey)
col = tex2D(_MainTex, IN.texcoord) * IN.color
return col
当颜色值的r值为0的时候,就灰色显示。
图集打好后,我们看看效果:
我们将r设置为0,但是图片还是没有成灰色,这是为何呢?后来根据的启示,找到NGUI,UIDrawCall.cs类,发现如果是Scroll下,NGUI会更改默认shader,我们是Unlit - Transparent Colored Gray.shader,它会去寻找Unlit - Transparent Colored Gray (SoftClip).shader,然后没找到就默认回nlit - Transparent Colored .shader,这下好办了,我们复制一份Unlit - Transparent Colored Gray.shader,更改它的名字为Unlit - Transparent Colored Gray.shader,然后打开它的代码:
Shader "Unlit/Transparent Colored Gray"
Properties
_MainTex ("Base (RGB), Alpha (A)", 2D) = "black" {}
将最顶上一行修改下名字:
Shader "Unlit/Transparent Colored Gray (SoftClip)"
Properties
_MainTex ("Base (RGB), Alpha (A)", 2D) = "black" {}
然后回过头来再看看显示:
灰色显示成功。
我们要代码控制它灰色怎么操作呢?
Color bgColor = item.FindChild(itemName +"/bgImage").GetComponent&UISprite&().color
bgColor.r = 0
item.FindChild(itemName + "/bgImage").GetComponent&UISprite&().color = bgColor
没有更多推荐了,
加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!

我要回帖

更多关于 image lab灰度分析 的文章

 

随机推荐