Ich möchte ein Tool erstellen, das dem Terrain-Tool von Unity ähnelt und einige nützliche Schaltflächen im Inspector enthält:
Wie kann ich ein ähnliches Design erzielen? Ich weiß, wie normale Schaltflächen und andere UI-Komponenten im Inspektor erstellt werden, aber ich kann nicht genügend Informationen finden, um die Schaltflächen umzuschalten.
Bisher habe ich normale Schalter verwendet, die eine Checkbox erzeugen:
var tmp = EditorGUILayout.Toggle( SetAmountFieldContent, _setValue );
if ( tmp != _setValue )
{
_setValue = tmp;
if ( _setValue )
_smoothValue = false;
}
tmp = EditorGUILayout.Toggle( SmoothValueFieldContent, _smoothValue );
if ( tmp != _smoothValue )
{
_smoothValue = tmp;
if ( _smoothValue )
_setValue = false;
}
Wenn Sie den Schalter GUIStyle
auf "Button" stellen, wird das gewünschte Ergebnis nicht erzielt. Der Text- oder Bildinhalt wird links von der Schaltfläche und nicht innen angezeigt.
var tmp = EditorGUILayout.Toggle( SetAmountFieldContent, _setValue, "Button" );
Auch scheint keine der in GUISkin gefundenen Optionen zu helfen.
_smoothValue = !GUILayout.Button( SetAmountFieldContent, _smoothValue ? ToggleButtonStyleToggled : ToggleButtonStyleNormal)
, anstatt zwei Booleaner zu haben? Das funktioniert gut für mich und den Code sieht schließen stadnard Einheit Knopf / Knebel mitToggle gibt den aktuellen Status der Schaltfläche zurück - entweder denselben Status, der als Wert übergeben wurde, oder den neuen Wert, den der Benutzer geändert hat. Also ein besseres Muster wäre ...
Sie können dasselbe zustandsabhängige Austauschmuster für GUIStyles verwenden.
quelle
Hier ist eine einfache, aber einfache Möglichkeit, dies zu tun:
von hier genommen
quelle
Verwenden Sie GUILayout.Toolbar . Die Dokumente sind irreführend und führen die Schaltflächen tatsächlich zusammen aus:
Außerdem können Sie die Stile "buttonleft", "buttonmid" und "buttonright" verwenden, um diese Schaltflächen direkt zu zeichnen.
quelle
Du kannst das:
Es ist sehr wichtig, dass Sie das
buttonStyle
Innere instanziieren,OnInspectorGUI()
andernfalls wird eine Fehlermeldung angezeigt . TunbuttonStyle = GUI.skin.button;
Sie dies auch nicht, da Sie dieskin.button
Referenz kopieren und bei jeder ÄnderungbuttonStyle
alle Schaltflächenstile ändern würden.quelle