您最多选择25个主题
主题必须以中文或者字母或数字开头,可以包含连字符 (-),并且长度不得超过35个字符
64 行
1.8 KiB
64 行
1.8 KiB
using System;
|
|
using UnityEngine;
|
|
using UnityEditor;
|
|
|
|
namespace UniVRM10
|
|
{
|
|
/// <summary>
|
|
/// Flag設定したEnumのインスペクター表示を変えるクラス
|
|
/// </summary>
|
|
[CustomPropertyDrawer(typeof(EnumFlagsAttribute))]
|
|
public sealed class EnumFlagsAttributeDrawer : PropertyDrawer
|
|
{
|
|
public override void OnGUI(
|
|
Rect position,
|
|
SerializedProperty prop,
|
|
GUIContent label
|
|
)
|
|
{
|
|
var buttonsIntValue = 0;
|
|
var enumLength = prop.enumNames.Length;
|
|
var labelWidth = EditorGUIUtility.labelWidth;
|
|
var buttonPressed = new bool[enumLength];
|
|
var buttonWidth = (position.width - labelWidth) / enumLength;
|
|
|
|
var labelPos = new Rect(
|
|
position.x,
|
|
position.y,
|
|
labelWidth,
|
|
position.height
|
|
);
|
|
EditorGUI.LabelField(labelPos, label);
|
|
EditorGUI.BeginChangeCheck();
|
|
|
|
for (int i = 0; i < enumLength; i++)
|
|
{
|
|
buttonPressed[i] = (prop.intValue & (1 << i)) == 1 << i;
|
|
|
|
var buttonPos = new Rect(
|
|
position.x + labelWidth + buttonWidth * i,
|
|
position.y,
|
|
buttonWidth,
|
|
position.height
|
|
);
|
|
|
|
buttonPressed[i] = GUI.Toggle(
|
|
buttonPos,
|
|
buttonPressed[i],
|
|
prop.enumNames[i],
|
|
"Button"
|
|
);
|
|
|
|
if (buttonPressed[i])
|
|
{
|
|
buttonsIntValue += 1 << i;
|
|
}
|
|
}
|
|
|
|
if (EditorGUI.EndChangeCheck())
|
|
{
|
|
prop.intValue = buttonsIntValue;
|
|
}
|
|
}
|
|
}
|
|
}
|