Unity3D中模型变换颜色的问题!!急~~~~~~~!!!

我有一个汽车模型包含很多子元素,我想选取其中的一些元素通过按钮变换颜色,编写了如下代码:
function OnGUI (){
GUI.skin=BtnGUIskins;

if(GUI.Button(Rect(810,250,100,30),"","BtnBlack"))
{renderer.material.color=Color.black;}

if(GUI.Button(Rect(810,200,100,30),"","BtnBlue"))
{renderer.material.color=Color.blue;}

if(GUI.Button(Rect(810,150,100,30),"","BtnRed"))
{renderer.material.color=Color.red;}

if(GUI.Button(Rect(810,100,100,30),"","BtnWhite"))
{renderer.material.color=Color.white;}

}

把代码赋给想变换颜色的一些元素,但是问题是:只有其中的一个元素可以变颜色,是啥问题啊?

效果如下:
怎么样能让整个汽车的外壳变成黑色呢?

跪求解决办法呀?!!
最新回答
逍遥独淩迗

2024-05-12 02:49:39

你的代码是为被给脚本的物体服务的,所以他只改变那个被给的脚本的物体的颜色
要想改变子物体,必须要遍历子物体,遍历部分可以如下写法
*****************************************************************************************************
//得到所有可渲染的子物体
Renderer[] rds = transform.GetComponentsInChildren<Renderer>();
//逐一遍历他的子物体
foreach (Renderer r in rds)
{
//逐一遍历子物体的子材质
foreach (Material m in r.materials)
{
m.color = Color.black;
}
}
追问
但是我把这段脚本附给了很多子物体,想让它们都改变颜色 为什么不可以?
追答
只要把脚本给根物体就可以了,运行时你选那个材质球看看到底变没变,有可能是反射的颜色干扰了
我狠丑可是我也不温柔

2024-05-12 00:26:20

如果是unity自建的object,应该没问题,但如果是导入的,可能会出现改不了的情况,其颜色也可能是由材质贴图控制的~这种情况下应该改贴图颜色才能改变颜色吧?~~
如果真是材质贴图倒方便了~~你可以通过PS多设置几张贴图,直接更改贴图就可以实现改变颜色了~~我用过这种方便 ~~嘻嘻~
我对unity不是很精通~~希望这个回答能给你帮上点小忙,而不是添乱~~嘻嘻~~~
拿命去忘记你°

2024-05-12 03:01:25

只要把你想要换色的部分都通用一个材质球(比如已经实现换色的那个材质球)就可以了,我刚好也在做一个汽车,已经实现车体换色了。
不与情长

2024-05-12 03:23:21

脚本赋给根对象就行了,不必遍历子对象
追问
真不行。。我试了
追答
建议你重新创建个project试下,有时unity工具会出现这种情况的
追问
我试过了重建project,子物体材质球颜色无变化啊...