목록

Unity Flag 사용법

Unity에서 Flag사용법 FrameWork코드에 박아놨는데 까먹을까봐 남김


  • 기존 Enum과 다르게 여러 중복 속성을 체크하고 싶어서

  • C++배울 때 비트단위로 Flag값 줘서 썻던거 같은데, Unity도 찾아보니 비슷한게 있었다. 몇가지 코드를 추가해주자

  • Customize Attribute참고

<EnumFlagAttribute.cs>

using UnityEngine;

// ** Attribute속성을 사용 할 수 있게 해주는 코드 **
public class EnumFlagAttribute : PropertyAttribute
{
    public EnumFlagAttribute() { }
}

-> 먼저 해당이름으로 속성값을 사용할 수 있도록 PropertyAttribute상속받는 class생성

<Flags.cs>

using UnityEngine;
using UnityEditor;

// ** Inspector창에서 Edit할 수 있게 해주는 코드 - 에디터의 기능 수정하는 코드이므로 Editor폴더에 넣어줘야한다 **
[CustomPropertyDrawer(typeof(EnumFlagAttribute))]
public class EnumFlagAttributeDrawer : PropertyDrawer
{
   public override void OnGUI(Rect position, SerializedProperty property, GUIContent label)
    {
        property.intValue = EditorGUI.MaskField(position, label, property.intValue, property.enumNames);
    }
}

-> Enum property을 에디터상에서 사용하기위해

<EnumFlagsAttributeDrawer.cs>

// ** 실제 사용할 flag값 정의 **
namespace YoureProjectName.Flags
{
  // 사용시 [EnumFlag] 태그 붙인다.
  public enum ProductionItem
  {
      USER_EXP    = (1 << 0),     // like as 0x00000001
      COIN        = (1 << 1),
  }
}