Unity5 关于修改组件GameObject的Color与mainTexture的探索

private var obj:GameObject;
private var render:Renderer;
public var texture:Texture;
function Start () {
	obj = GameObject.Find("Cube");
//	obj.AddComponent.<Test>();
	render = obj.GetComponent.<Renderer>();
}
function OnGUI()
{
	if(GUILayout.Button("add color",GUILayout.Width(100),GUILayout.Height(50)))
	{
		render.material.color = Color.blue;
		<span style="color:#ff0000;">render.material.mainTexture = null;</span>
	}
	if(GUILayout.Button("add texture",GUILayout.Width(100),GUILayout.Height(50)))
	{
		render.material = null;
		<span style="color:#6600cc;">render.material.mainTexture = texture;</span>
	}
}
function Update () {

}

以上代码就是为了点击按钮“add color”将Cube的颜色变成blue;点击“add texture”,将Cube贴图。

原图:


改变颜色后:


改变纹理后


关键在于红色与紫色那句。

红色那句好理解,因为如果去掉清除纹理这一句,纹理就会残留,就达不到将图像改变成纯色蓝色的效果,去掉这句之后,如果先添加纹理,再添加颜色,效果如下图:



看,是不是设置了颜色,纹理还在,我认为这种混合效果就是只保留了蓝色分量的效果。


紫色那句我当时看了很纳闷,这不是病句么,先把render的material设置为了null,然后又去设置render的material的属性,这不是肯定会空引用异常么。结果没有出现错误。于是我去掉了这一句,于是出现了和上图一样的效果,这就说明,是Color没有清除掉,通过打断点得知,紫色这句执行后,material不为空,不过material的属性color变成了(1,1,1,1),也就是Color.white.于是我认为

紫色这句:render.material = null;可以替换成:render.material.color = Color.white;这样达到了一样的效果,思考,为什么呢?

原因就是由于r/g/b分量都是255,r/g/b通道颜色值都得到了保留也就是纹理的本来效果了。


  • 8
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值