【发布时间】:2017-08-17 09:05:05
【问题描述】:
我为我正在进行的项目制作了一个窗口工具。当您在场景中选择一些对象并选择一种颜色并点击应用时,它应该会更改您选择的对象的颜色。它确实如此。但它也会更改一些其他对象,即使它们没有被选中。
我认为这与我在渲染器上设置 SharedMaterial 的颜色有关,但如果我使用普通的 Material.Color,它会给我一个错误,即它正在将材质泄漏到场景中并且我可能会改用 SharedMaterial。
现在我的问题是:如何解决这个问题,而不必每次需要新颜色时都创建新材料。因为这就是我制作工具的原因(无需为其创建新材质即可更改对象的颜色)。
private void OnGUI()
{
newColor = EditorGUILayout.ColorField("Color", newColor);
EditorGUILayout.Space();
if (GUILayout.Button("Apply color"))
{
foreach (GameObject element in Selection.gameObjects)
{
Renderer renderer = element.GetComponent<Renderer>();
if (renderer != null)
{
renderer.sharedMaterial.color = newColor;
}
}
}
}
【问题讨论】:
-
在这里贴出代码比截图更有用。你有没有通过调试器运行它,并查看
Selection.gameObjects集合中的对象是否是你所期望的? -
那是什么框架?这不是标准的 C#,是 Unity 吗?