我爲我正在開發的一個項目製作了一個窗口工具。當您選擇場景中的某些對象並選取一種顏色並點擊應用時,它應該更改所選對象的顏色。它做什麼。但它也會改變其他一些對象,即使它們沒有被選中。當我想改變一個物體的顏色時,其他一些物體也改變了
我認爲這與我在渲染器上設置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'集合中的對象是否是你期望的對象? – ainwood
那是什麼框架?這不是標準的C#,是Unity嗎? – nvoigt