Unity에서 Flag사용법 FrameWork코드에 박아놨는데 까먹을까봐 남김
-
기존 Enum과 다르게 여러 중복 속성을 체크하고 싶어서
-
C++배울 때 비트단위로 Flag값 줘서 썻던거 같은데, Unity도 찾아보니 비슷한게 있었다. 몇가지 코드를 추가해주자
<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),
}
}