
In dieser Veröffentlichung werde ich versuchen, kurz auf die Art der Aufzählung in 
C # , ihre Verwendung als Flags sowie auf die Vereinfachung ihrer Zeichnung im 
Unity- Inspektor einzugehen. 
Was ist Enum?
Aufzählungen sind ein wichtiger Typ in 
C # , der aus einer Reihe von Konstanten besteht. Das Schlüsselwort 
enum wird verwendet, um es zu deklarieren. Jeder Enumerator hat einen ganzzahligen Wert. Der erste ist standardmäßig 
0 und die nachfolgenden erhöhen sich um 
1 .
enum Color { Red,  
Sie können Initialisierer verwenden, um Werte zu überschreiben.
 enum Color { Red = 1, Green = 2, Blue = 3 } 
Jeder Aufzählungstyp hat einen Basistyp, der ein beliebiger ganzzahliger Typ außer 
char sein kann (der Standardwert ist 
int ). Es kann auch explizit angegeben werden.
 enum Color : byte { Red = 1, Green = 2, Blue = 3 } 
Flaggen
Manchmal ist es erforderlich, eine Entität mit einer Reihe von Eigenschaften auszustatten. Sie können mehrere Felder deklarieren oder eine Liste erstellen, aber manchmal reicht eine einzige Liste aus. Um die Aufzählung als Flags zu verwenden, fügen Sie das spezielle Attribut 
System.FlagsAttribute hinzu . Dies erfordert eine explizite Initialisierung von Werten, von denen jeder zu einer Potenz erhoben wird.
 [System.FlagsAttribute] enum Color : byte { None = 0, Red = 1,  
Mit der bitweisen 
ODER- Verknüpfung können Sie Aufzählungselemente kombinieren und mithilfe der 
HasFlag- Methode 
(Enum) prüfen, ob in einer Instanz Bitfelder vorhanden sind.
 var color = Color.Red | Color.Green | Color.Blue; var hasFlag = color.HasFlag(Color.Red | Color.Green);  
Sie können Überprüfungen auch mit der bitweisen 
UND- Operation durchführen.
 var aColor = Color.Red | Color.Green; var bColor = Color.Green | Color.Blue;  
Übertragungen in Einheit
Nehmen Sie zum Beispiel den folgenden Code.
 using UnityEngine; public enum Color { Red, Green, Blue } public class Example : MonoBehaviour { public Color Color; } 
Mit den integrierten 
Unity- Tools können Sie Aufzählungen in einer Dropdown-Liste anzeigen.

Leider kann der Editor keine Aufzählungen in Form von Flags automatisch zeichnen. Zu diesem Zweck ist eine Neudefinition des Inspektors erforderlich, was bei weitem nicht immer zweckmäßig ist. Sie können sich jedoch für den Trick entscheiden und Zeichnungsaufzählungen global neu definieren. Ändern Sie zunächst das Beispiel.
 using System; using UnityEngine; [Flags] public enum Color { Red = 1, Green = 2, Blue = 4 } public class Example : MonoBehaviour { public Color Color; } 
Als Nächstes müssen Sie Ihren 
PropertyDrawer implementieren. Wenn die serialisierbare Eigenschaft das 
Flags- Attribut hat, verwenden wir die 
EditorGUI.MaskField- Methode zum Zeichnen und ansonsten die Standard- 
EditorGUI.PropertyField- Methode. Beachten Sie auch, dass eine Eigenschaft ein Element eines Arrays sein kann. Der folgende Code sollte in einem Ordner namens 
Editor abgelegt werden.
 [CustomPropertyDrawer(typeof(Enum), true)] public sealed class EnumPropertyDrawer : PropertyDrawer { public override void OnGUI(Rect position, SerializedProperty property, GUIContent label) { using (new EditorGUI.PropertyScope(position, label, property)) { if (HasEnumFlagsAttribute()) { var intValue = EditorGUI.MaskField(position, label, property.intValue, property.enumDisplayNames); if (property.intValue != intValue) { property.intValue = intValue; } } else { EditorGUI.PropertyField(position, property, label); } } bool HasEnumFlagsAttribute() { var fieldType = fieldInfo.FieldType; if (fieldType.IsArray) { var elementType = fieldType.GetElementType(); return elementType.IsDefined(typeof(FlagsAttribute), false); } return fieldType.IsDefined(typeof(FlagsAttribute), false); } } } 
Jetzt wird das Feld im Inspektor für jeden 
Aufzählungstyp korrekt angezeigt.

Zusätzlich zu bestimmten Aufzählungswerten fügt der Editor zwei weitere hinzu:
- Nichts - hat einen ganzzahligen Wert von 0 ;
- Alles - hat einen ganzzahligen Wert von -1 .
Verwandte Links