リポジトリ
使用例
using System;
using UnityEngine;
[Flags]
public enum Attribute
{
FIRE = 1 << 1,
AQUA = 1 << 2,
GRASS = 1 << 3,
}
public sealed class Example : MonoBehaviour
{
[SerializeField] private Attribute m_attribute;
}
using Kogane;
using UnityEditor;
using UnityEngine;
[CustomPropertyDrawer( typeof( Attribute ) )]
public sealed class AttributeDrawer : PropertyDrawer
{
public override void OnGUI
(
Rect position,
SerializedProperty property,
GUIContent label
)
{
var intValue = property.intValue;
var datas = new EditorTogglesData[]
{
new( new GUIContent( "くさ" ), ( intValue & ( int )Attribute.GRASS ) != 0 ),
new( new GUIContent( "ほのお" ), ( intValue & ( int )Attribute.FIRE ) != 0 ),
new( new GUIContent( "みず" ), ( intValue & ( int )Attribute.AQUA ) != 0 ),
};
KoganeEditorUtility.EditorToggles( position, label, datas );
var newIntValue = 0;
if ( datas[ 0 ].Value ) newIntValue |= ( int )Attribute.GRASS;
if ( datas[ 1 ].Value ) newIntValue |= ( int )Attribute.FIRE;
if ( datas[ 2 ].Value ) newIntValue |= ( int )Attribute.AQUA;
if ( intValue == newIntValue ) return;
property.intValue = newIntValue;
}
}