-
유니티 Enum을 플래그로 만들어 다중선택 판단하기 / Unity Enum Flags유니티 2023. 10. 17. 14:34
Enum을 플래그(Flag)로 만들어 인스펙터에서 다중 선택을 해 봅시다.
그리고 어떤 게 체크가 되어있는지 판단해 봅시다.
[Flags] public enum EActType { None = 0, Run = 1 << 0, Fly = 1 << 1, Speak = 1 << 2, } public EActType eActType; void Start() { if (eActType.HasFlag(EActType.Fly)) print("Fly 가지고 있음"); if (eActType.HasFlag(EActType.Run | EActType.Fly)) print("Run과 Fly 둘다 가지고 있음"); if (eActType.HasFlag(EActType.Run) || eActType.HasFlag(EActType.Fly)) print("Run또는 Fly를 가지고 있음"); }
Enum을 선언할 때 애트리뷰트로 [Flags]를 붙혀 Enum Flags라고 해줍니다.
또 안에 값을 넣는게 중요한데 None은 0으로 만들어 두어 선택할 때 없는 상태를 명시할 수 있습니다.
그리고 이후 값들은 시프트 비트연산으로 순서대로 값을 대입합니다.
1 << 2 라면 1이란 값을 두번 옮긴 것을 이진법으로 표현한 것으로 4입니다.
Enum 시프트 연산자 대입값 이진법 십진법 None 0 0000 0 Run 1 << 0 0001 1 Fly 1 << 1 0010 2 Speak 1 << 2 0100 4 이진법은 (2)라고 표현하겠습니다.
Run과 Fly를 두개 체크하면 0001(2) + 0010(2) = 0011(2) 이 됩니다.
0011(2) 은 십진법으로 3입니다.
HasFlag로 계산하기
HasFlag는 AND 비트연산을 해서 0이 아니면 true, 0이면 false를 반환합니다.
AND 비트연산(&)은 모두 1이어야 1을 반환합니다.
1. eActType.HasFlag(EActType.Fly)
결과값이 0이 아니기 때문에 true입니다.
2. eActType.HasFlag(EActType.Run | EActType.Fly)
OR 비트연산 |는 둘중 하나라도 1이면 1을 반환합니다.
먼저 EActType.Run | EActType.Fly를 계산하고 HasFlag로 계산합니다.
결과값이 0이 아니기 때문에 true입니다.
3. eActType.HasFlag(EActType.Run) || eActType.HasFlag(EActType.Fly)
||
OR 연산(||)은 둘 중 하나라도 true이면 true입니다.
앞의 결과도 0이 아니기 때문에 true이고, 뒤의 결과도 0이 아니기 때문에 true입니다.
결과값은 true || true 이기에 true입니다.
'유니티' 카테고리의 다른 글