
рдЗрд╕ рдкреНрд░рдХрд╛рд╢рди рдореЗрдВ, рдореИрдВ рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ
C # рдореЗрдВ рдПрдиреНрдпреВрдорд░реЗрд╢рди рдХреЗ рдкреНрд░рдХрд╛рд░, рдЭрдВрдбреЗ рдХреЗ рд░реВрдк рдореЗрдВ рдЗрд╕рдХреЗ рдЙрдкрдпреЛрдЧ рдХреЗ рд╕рд╛рде-рд╕рд╛рде
рдпреВрдирд┐рдЯреА рдЗрдВрд╕реНрдкреЗрдХреНрдЯрд░ рдореЗрдВ рдЙрдирдХреЗ рдбреНрд░рд╛рдЗрдВрдЧ рдХреЛ рд╕рд░рд▓ рдмрдирд╛рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реВрдВрдЧрд╛ред
Enum рдХреНрдпрд╛ рд╣реИ?
рдЧрдгрдирд╛
# рд╕реА рдореЗрдВ рдПрдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдкреНрд░рдХрд╛рд░
рд╣реИ , рдЬрд┐рд╕рдореЗрдВ рд╕реНрдерд┐рд░рд╛рдВрдХ рдХрд╛ рдПрдХ рд╕реЗрдЯ рд╣реЛрддрд╛ рд╣реИред рдЗрд╕реЗ рдШреЛрд╖рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреАрд╡рд░реНрдб
рдПрдирдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдкреНрд░рддреНрдпреЗрдХ рдкреНрд░рдЧрдгрдХ рдХрд╛ рдкреВрд░реНрдгрд╛рдВрдХ рдорд╛рди рд╣реЛрддрд╛ рд╣реИред рдкрд╣рд▓реЗ
0 рдореЗрдВ рдЪреВрдХ рд╣реЛрддреА рд╣реИ, рдФрд░ рдмрд╛рдж рдореЗрдВ
1 рд╕реЗ рдмрдврд╝ рдЬрд╛рддреА рд╣реИред
enum Color { Red,
рдореВрд▓реНрдпреЛрдВ рдХреЛ рдУрд╡рд░рд░рд╛рдЗрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдк рдЗрдирд┐рд╢рд▓рд╛рдЗрдЬрд╝рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
enum Color { Red = 1, Green = 2, Blue = 3 }
рдкреНрд░рддреНрдпреЗрдХ рдкреНрд░рдХрд╛рд░ рдХреЗ рдПрдиреНрдпреВрдорд░реЗрд╢рди рдореЗрдВ рдПрдХ рдЖрдзрд╛рд░ рдкреНрд░рдХрд╛рд░ рд╣реЛрддрд╛ рд╣реИ, рдЬреЛ рдХрд┐рд╕реА рднреА рдкреВрд░реНрдгрд╛рдВрдХ рдкреНрд░рдХрд╛рд░ рдХреЛ рдЫреЛрдбрд╝рдХрд░ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ
рдЪрд╛рд░ (рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд╣реИ)ред рдЗрд╕реЗ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рднреА рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
enum Color : byte { Red = 1, Green = 2, Blue = 3 }
рдЭрдВрдбреЗ
рдХрднреА-рдХрднреА рдХрд┐рд╕реА рдЗрдХрд╛рдИ рдХреЛ рдХрдИ рдЧреБрдгреЛрдВ рд╕реЗ рд╕рдВрдкрдиреНрди рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред рдЖрдк рдХрдИ рдлрд╝реАрд▓реНрдб рдШреЛрд╖рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдпрд╛ рдПрдХ рд╕реВрдЪреА рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдХрднреА-рдХрднреА рдПрдХ рд╣реА рд╕реВрдЪреА рдкрд░реНрдпрд╛рдкреНрдд рд╣реЛрддреА рд╣реИред рдЧрдгрди рдХреЛ рдЭрдВрдбреЗ рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╡рд┐рд╢реЗрд╖ рд╡рд┐рд╢реЗрд╖рддрд╛
System.FlagsAttribute рдЬреЛрдбрд╝реЗрдВред рдЗрд╕рдХреЗ рд▓рд┐рдП рдореВрд▓реНрдпреЛрдВ рдХреЗ рд╕реНрдкрд╖реНрдЯ рдЖрд░рдВрдн рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рдЬрд┐рдирдореЗрдВ рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдХреЛ рдПрдХ рд╢рдХреНрддрд┐ рдХреЗ рд▓рд┐рдП рдЙрдард╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
[System.FlagsAttribute] enum Color : byte { None = 0, Red = 1,
рдмрд┐рдЯрд╡рд╛рдЗрдЬрд╝
рдпрд╛ рдСрдкрд░реЗрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ, рдЖрдк рдПрдиреНрдпреВрдорд░реЗрд╢рди рдПрд▓рд┐рдореЗрдВрдЯреНрд╕ рдХреЛ рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ рдмрд┐рдЯ рдлрд╝реАрд▓реНрдбреНрд╕ рдХреА рдЙрдкрд╕реНрдерд┐рддрд┐ рдХреЗ рд▓рд┐рдП
рд╣реИрд╕рдлрд╝реНрд▓реИрдЧ (рдПрдирдо) рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
var color = Color.Red | Color.Green | Color.Blue; var hasFlag = color.HasFlag(Color.Red | Color.Green);
рдЖрдк
AND рдмрд┐рдЯрд╡рд╛рдЗрдЬрд╝ рдСрдкрд░реЗрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЪреЗрдХ рднреА рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
var aColor = Color.Red | Color.Green; var bColor = Color.Green | Color.Blue;
рдПрдХрддрд╛ рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рдг
рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдиреАрдЪреЗ рджрд┐рдпрд╛ рдЧрдпрд╛ рдХреЛрдб рд▓реЗрдВред
using UnityEngine; public enum Color { Red, Green, Blue } public class Example : MonoBehaviour { public Color Color; }
рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд
рдПрдХрддрд╛ рдЙрдкрдХрд░рдг рдЖрдкрдХреЛ рдбреНрд░реЙрдк-рдбрд╛рдЙрди рд╕реВрдЪреА рдХреЗ рд░реВрдк рдореЗрдВ рдЧрдгрдирд╛ рджрд┐рдЦрд╛рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреЗ рд╣реИрдВред

рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, рд╕рдВрдкрд╛рджрдХ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдЭрдВрдбреЗ рдХреЗ рд░реВрдк рдореЗрдВ рдЧрдгрдирд╛ рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ рд╣реИред рдЗрди рдЙрджреНрджреЗрд╢реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП, рдирд┐рд░реАрдХреНрд╖рдХ рдХреЗ рдкреБрдирд░реНрд╡рд┐рддрд░рдг рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рдЬреЛ рд╣рдореЗрд╢рд╛ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реЛрддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдЖрдк рд╡рд┐рд╢реНрд╡ рд╕реНрддрд░ рдкрд░ рдЯреНрд░рд┐рдХ рдФрд░ рдбреНрд░рд╛рдЗрдВрдЧ рдбреНрд░рд╛рдЗрдВрдЧ рдХреЛ рдлрд┐рд░ рд╕реЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВред рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдЙрджрд╛рд╣рд░рдг рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░реЗрдВред
using System; using UnityEngine; [Flags] public enum Color { Red = 1, Green = 2, Blue = 4 } public class Example : MonoBehaviour { public Color Color; }
рдЗрд╕рдХреЗ рдмрд╛рдж, рдЖрдкрдХреЛ рдЕрдкрдиреЗ
рдкреНрд░реЙрдкрд░реНрдЯреАрд╡реЗрд░ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдпрджрд┐ рд╕реАрд░рд┐рдпрд▓ рдХрд░рдиреЗ рдпреЛрдЧреНрдп рд╕рдВрдкрддреНрддрд┐ рдореЗрдВ
рдЭрдВрдбреЗ рд╡рд┐рд╢реЗрд╖рддрд╛ рд╣реИ, рддреЛ рд╣рдо рдбреНрд░рд╛рдЗрдВрдЧ рдХреЗ рд▓рд┐рдП
EditorGUI.MaskField рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗ, рдФрд░ рдЕрдиреНрдпрдерд╛ рдорд╛рдирдХ
EditorGUI.PropertyField рд╡рд┐рдзрд┐ред рдпрд╣ рднреА рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдПрдХ рд╕рдВрдкрддреНрддрд┐ рдПрдХ рд╕рд░рдгреА рдХрд╛ рдПрдХ рддрддреНрд╡ рд╣реЛ рд╕рдХрддреА рд╣реИред рдиреАрдЪреЗ рджрд┐рдП рдЧрдП рдХреЛрдб рдХреЛ
рд╕рдВрдкрд╛рджрдХ рдирд╛рдордХ рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рд░рдЦрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред
[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); } } }
рдЕрдм рдХрд┐рд╕реА рднреА
Enum рдкреНрд░рдХрд╛рд░ рдХреЗ рд▓рд┐рдП рдирд┐рд░реАрдХреНрд╖рдХ рдореЗрдВ рдлрд╝реАрд▓реНрдб рдХреЛ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред

рдХреБрдЫ рдЧрдгрдирд╛ рдореВрд▓реНрдпреЛрдВ рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд╕рдВрдкрд╛рджрдХ рджреЛ рдФрд░ рдЬреЛрдбрд╝рддрд╛ рд╣реИ:
- рдХреБрдЫ рдирд╣реАрдВ - 0 рдХрд╛ рдкреВрд░реНрдгрд╛рдВрдХ рдорд╛рди рд╣реИ;
- рд╕рдм рдХреБрдЫ - рдПрдХ рдкреВрд░реНрдгрд╛рдВрдХ рдорд╛рди -1 рд╣реИ ред
рд╕рдВрдмрдВрдзрд┐рдд рд▓рд┐рдВрдХ