Ich habe ein Fenster-Tool für ein Projekt erstellt, an dem ich gerade arbeite. Wenn Sie einige Objekte in der Szene auswählen, eine Farbe auswählen und auf Anwenden klicken, sollte sich die Farbe der ausgewählten Objekte ändern. Was es macht. Aber es ändert auch einige andere Objekte, obwohl sie nicht ausgewählt wurden.Wenn ich die Farbe eines Objekts ändern möchte, ändern sich auch einige andere Objekte.
Ich denke das hat damit zu tun, dass ich die Farbe des SharedMaterial auf den Renderer setze, aber wenn ich die normale Material.Color verwenden würde, gibt es mir einen Fehler, dass Material in die Szene und ausleckt dass ich stattdessen SharedMaterial verwenden könnte.
Jetzt ist meine Frage: Wie behebe ich dieses Problem, ohne jedes Mal ein neues Material zu erstellen, wenn ich eine neue Farbe brauche. Weil ich deshalb das Werkzeug gemacht habe (ändere die Farbe eines Objekts, ohne dafür ein neues Material erstellen zu müssen).
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;
}
}
}
}
Es ist viel nützlicher, wenn Sie den Code hier, anstatt einen Screenshot posten. Haben Sie dies durch den Debugger ausgeführt und gesehen, ob die Objekte in der 'Selection.gameObjects'-Sammlung erwartungsgemäß sind? – ainwood
Welcher Rahmen ist das? Dies ist kein Standard C#, ist es Unity? – nvoigt