게임을 개발할 때 여러가지 속성값을 갖는 데이터들이 존재한다. 스킬같은 경우는 불속성, 물속성, 바람속성 등 이 있을 수 있겠고 또 플레이어는 여러가지 상태라는 속성값이 있을 수 있다. 이런 속성들을 간편하게 사용하려면 속성을 Enum값으로 담고 비트 연산자 등을 사용하여 Enum값을 조합하는 등 Flag로 사용하는 것이다.
public enum GameState
{
Menu = 1,
Lobby = 2,
JoinMenu = 4,
}
Enum 열거형으로 사용하며 Enum이 여러 속성들을 선택할 수 있게 해준다.
인스펙터 창에서 여러 속성들을 선택할 수도 있다.
enum(열거형)에서는 Flag(FlagsAttributes)속성이 있는데, 이를 이용하면 하나의 속성을 선택하는 것이 아니라 여러 속성을 선택하는 것이 가능하다. 다음의 코드는 열거형의 Flag연산을 쉽게 정리해 놓은 것이다.
[Flags]
enum MyEnum
{
// None = 0, 와 같은 값을 선언할 수는 있으나 비트 단위 (bitwise) 로 조합되어 사용될 수는 없다
FlagA = 1,
FlagB = 2,
FlagC = 4,
FlagD = 8
// 비트 단위 (bitwise) 연산을 하용하기 위해서는
// 2 의 제곱수나 2의 제곱수의 조합을 사용해야 한다
}
var twoFlags = MyEnum.FlagA | MyEnum.FlagB;
// 이는 해당 변수가 갖는 모든 플래그들을 열거해 줄 것이다: "FlagA, FlagB".
Console.WriteLine(twoFlags);
Enum값을 Flag로 사용하기 위해서는 각 Enum값이 2의 제곱수로 값을 매겨주어야 한다. 그리고 비트 연산자를 사용하여 포함할 속성값들을 하나의 변수에 담을 수 있다.
[Flags]
enum FlagsEnum
{
None = 0,
Option1 = 1 << 0,
Option2 = 1 << 1,
Option3 = 1 << 2,
Default = Option1 | Option3,
All = Option1 | Option2 | Option3,
}
2의 제곱수들을 10진수 형태로 일일이 기술하는 것이 불편하면 좌측 시프트 연산자(<<)을 사용하여 선언할 수도 있다.
1) [Flags] 속성을 사용하면 아래와 같은 코드가 가능하다(두 속성을 하나의 변수에 담는 것)
FlagsEnum MyFlagsEnum = FlagsEnum.Option1 | FLagsEnum.Option2;
2) 값이 존재하는지 확인
if((MyFlagsEnum & FlagsEnum.Option1) != 0)
3) 특정 값을 추가
MyFlagsEnum |= FlagsEnum.Option3;
4) 특정 값을 제거
MyFlagsEnum &= ~FlagsEnum.Option3;
5) 특정 값을 반전(1은0으로, 0은 1로)
MyFlagsEnum ^= FlagsEnum.Option2;
6) 모든 값 삭제
MyFlagsEnum = FlagsEnum.None;
7) 모든 값 설정
MyFlagsEnum = FlagsEnum.All;
8) 특정 값을 제외하고 모두 설정
MyFlagsEnum = FlagsEnum.All ^ FlagsEnum.Option1 ^ FlagsEnum.Option2;
https://wlsdn629.tistory.com/entry/%EC%9C%A0%EB%8B%88%ED%8B%B0-Flag-%EC%86%8D%EC%84%B1
유니티 [Flag] 속성
[Flag] 속성이란 enum 열거형에서 사용할 수 있으며 enum이 여러 속성을 선택할 수 있게 해주는 기능입니다! [참고 사이트] https://dallcom-forever2620.tistory.com/15 [C#] enum 에서 Flags 속성달기 12345678910[Flags]pu
wlsdn629.tistory.com
https://nochoco-lee.tistory.com/560
22.2: Enum 값을 플래그 (flag) 로 사용하기
Section 22.2: Enum 값을 플래그 (flag) 로 사용하기 FlagsAttribute 를 사용하면 ToString() 메소드가 매칭되는 enum 값에 대해 동작하는 방식을 변경할 수 있다: [Flags] enum MyEnum { // None = 0, 와 같은 값을 선언할
nochoco-lee.tistory.com
https://roazium.tistory.com/190
[C#] enum의 Flag 연산
enum(열거형)에서는 Flag(FlagsAttribute)속성이 있는데, 이를 이용하면 하나의 속성을 선택하는 것이 아니라 여러 속성을 선택하는 것이 가능합니다.다음의 코드는 열거형의 Flag연산을 쉽게 정리해 놓
roazium.tistory.com
'게임개발 > 스터디' 카테고리의 다른 글
[스터디] 액션 Action 함수란? (0) | 2024.04.15 |
---|---|
[스터디] delegate 델리게이트란? (0) | 2024.04.13 |
[스터디] FSM 패턴과 사용해야 하는 이유 (0) | 2024.04.11 |
[스터디] MonoBehavior 붙이고 안 붙이고 차이 (0) | 2024.04.11 |
[스터디] 렌더링 파이프라인 알기 쉽게 정리한 글 (0) | 2024.04.11 |