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贴图。

原图:

Unity5 关于修改组件GameObject的Color与mainTexture的探索_第1张图片

改变颜色后:

Unity5 关于修改组件GameObject的Color与mainTexture的探索_第2张图片

改变纹理后

Unity5 关于修改组件GameObject的Color与mainTexture的探索_第3张图片

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

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


Unity5 关于修改组件GameObject的Color与mainTexture的探索_第4张图片

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


紫色那句我当时看了很纳闷,这不是病句么,先把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通道颜色值都得到了保留也就是纹理的本来效果了。


你可能感兴趣的:(unity3d)