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;}

}

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

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

跪求解决办法呀?!!

你的代码是为被给脚本的物体服务的,所以他只改变那个被给的脚本的物体的颜色
要想改变子物体,必须要遍历子物体,遍历部分可以如下写法
*****************************************************************************************************
//得到所有可渲染的子物体
Renderer[] rds = transform.GetComponentsInChildren<Renderer>();
//逐一遍历他的子物体
foreach (Renderer r in rds)
{
//逐一遍历子物体的子材质
foreach (Material m in r.materials)
{
m.color = Color.black;
}
}追问

但是我把这段脚本附给了很多子物体,想让它们都改变颜色 为什么不可以?

追答

只要把脚本给根物体就可以了,运行时你选那个材质球看看到底变没变,有可能是反射的颜色干扰了

温馨提示:内容为网友见解,仅供参考
第1个回答  2012-05-08
如果是unity自建的object,应该没问题,但如果是导入的,可能会出现改不了的情况,其颜色也可能是由材质贴图控制的~这种情况下应该改贴图颜色才能改变颜色吧?~~
如果真是材质贴图倒方便了~~你可以通过PS多设置几张贴图,直接更改贴图就可以实现改变颜色了~~我用过这种方便 ~~嘻嘻~
我对unity不是很精通~~希望这个回答能给你帮上点小忙,而不是添乱~~嘻嘻~~~
第2个回答  2013-12-17
只要把你想要换色的部分都通用一个材质球(比如已经实现换色的那个材质球)就可以了,我刚好也在做一个汽车,已经实现车体换色了。
第3个回答  2012-05-08
脚本赋给根对象就行了,不必遍历子对象追问

真不行。。我试了

追答

建议你重新创建个project试下,有时unity工具会出现这种情况的

追问

我试过了重建project,子物体材质球颜色无变化啊...

Unity3D中模型变换颜色的问题!!急~~~!!!
你的代码是为被给脚本的物体服务的,所以他只改变那个被给的脚本的物体的颜色 要想改变子物体,必须要遍历子物体,遍历部分可以如下写法 \/\/得到所有可渲染的子物体 Renderer[] rds = transform.GetComponentsInChildren<Renderer>();\/\/逐一遍历他的子物体 foreach (Renderer r in rds){ \/\/逐一遍历子...

急急急急啊~~~unity3d到入fbx人物模型破面怎么回事~~~
可能的情况很多。一可能面数过多unity导入将其压缩以致出错,这个不常见 二是模型的法线错误或者法线反向 三是着色器用的不对 2和3点的法线问题会导致某些面是反的因此是透明的所以看起来像是破面的效果。是最常见的错误

关于unity3d的模型动作问题
对于问题1:新建一个动画层1,设定weight为1,然后新建一个avatar mask将不希望动的部分取消掉(在这里就是移动的时候的两条腿保持层0的移动动画)对于问题2:还是新建一个动画层,设定为weight为1,然后新建一个avatar mask将不希望动的部分取消掉,勾选IK(反向动力学),然后用代码lookat鼠标位置就...

unity3d文字颜色为什么没地方可以修改,我新建的GUI Text属性那里根本没...
unity3d文字颜色为什么没地方可以修改,我新建的GUI Text属性那里根本没有Color这个选项可以改变颜色啊! unity3d文字颜色为什么没地方可以修改,我新建的GUIText属性那里根本没有Color这个选项可以改变颜色啊!... unity3d文字颜色为什么没地方可以修改,我新建的GUI Text属性那里根本没有Color这个选项可以改变颜色啊! 展开 ...

unity3d放入的fbx模型纹理出错
这个问题我也遇到过,好像是maya的骨骼动画在unity3d中不能使用,unity3d有自己的骨骼动画系统,可以使用这个来制作骨骼动画。

【Unity3D】Shader Graph简介
Shader Graph 是 Unity 提供的一款用于创建 Shader 的图形化工具。其运作原理类似于 Blender 的 Shader Editor 和 Unreal Engine 的 Material Editor,通过以流程图的形式直观地描绘顶点变换与片元着色过程,用户可以通过连接节点来实现复杂的特效,这种可视化的方法使得 Shader 创作更加简洁直观。Shader Graph...

unity3d中如何导入3dmax创建的模型
首先,我们需要在3dmax里设置单位 然后将显示单位和系统单位比例都设置成厘米,然后确定 设置完就可以创建自己需要的模型了,我这里就创建一个球体吧,再给球一个材质,操作是按M键出现材质编辑器,漫反射选择位图,选择需要的纹理,然后点击在视口中显示。然后将模型导出成FBX格式,并把他保存在unity3d...

关于unity3d的材质球的问题?
探讨Unity3D材质球问题,首先,导入FBX模型时,右侧面板通常会提供导出材质的选项,导出后即可进行编辑。在操作过程中,有几点需要注意。通常,FBX模型导入到场景中会自动以预制件(prefab)形式存在,这种情况下,若先解开了预制件的关联,再进行材质导出,可能会引起场景中物体材质的丢失。解决办法包括重新...

unity3d在实例化数个模型都帧数大幅下降
另外,你对实例化的方法理解可能存在一些问题。就实例化10个刚体球,一般不会使游戏帧率变化很大。不太清楚你是不是将实例化写到循环里面了,如果写到循环里面,那么就会出现帧率大减的情况。unity里面最好实例化是场景开始的时候就准备好,另外你实例化时应该提前做好prefab模型才好。

unity3d模型怎么做动画
unity没用过,以前学了一个virtools。大多数的游戏制作软件好像都是利用已经有的素材加工制作的,通常都是有Maya,3dmax等软件绑定制作动画,制作出效果之后再用其他软件加工处理。

相似回答