我有一套3D模型,每个模型都有自己的物质元素。一个模型有一个网格渲染器中的所有元素,我很容易对每个元素进行更改,如下所示:
用于进行更改的代码
public Renderer[] rend;
rend[PlayerPrefs.GetInt("SelectedBall")].materials[0].color = currentcolor;
if (PlayerPrefs.GetInt("SelectedBall") == 1)
{
rend[PlayerPrefs.GetInt("SelectedBall")].materials[0].color = Color.white;
rend[PlayerPrefs.GetInt("SelectedBall")].materials[1].color = currentcolor;
rend[PlayerPrefs.GetInt("SelectedBall")].materials[2].color = currentcolor;
rend[PlayerPrefs.GetInt("SelectedBall")].materials[3].color = currentcolor;
}
我有一个有两个子对象的第二个模型,每个子对象都有自己的元素。
我面临的挑战是,如果我使用上述相同的代码,它只会影响"Cylinder001“元素。
如何访问Sphere003元素并在一个代码中进行更改。
谢谢
发布于 2018-12-18 00:48:33
我不明白为什么会有一个渲染器数组,或者如果您使用它访问所有模型的所有网格呈现器,但这段代码可能有助于解决所有对象的问题:
for (int i = 0; i< gameObject.transform.childCount;i++)
{
rend = gameObject.transform.GetChild(i).GetComponent<MeshRenderer>();
rend.materials[0].color = Color.white;
for(int j = 1; j<rend.materials.Length;j++)
{
rend.materials[j].color = currentcolor;
}
}
发布于 2018-12-18 03:27:39
如果您想遍历转换树,例如获取同级组件(据我所知,您希望影响同级对象的MeshRenderer ),则可以使用transform.parent将级别向上移动。
GameObject parentGameObject=transform.parent.gameObject;
MeshRenderer[] allMeshRenderers=parentGameObject.GetComponentsInChildren<MeshRenderer>();
然后,您可以遍历渲染器,并根据需要更改颜色/材料。
https://stackoverflow.com/questions/53828798
复制