此示例项目是为了演示 Unity 输入系统的各种工具和功能。
您最多选择25个主题 主题必须以中文或者字母或数字开头,可以包含连字符 (-),并且长度不得超过35个字符
 
 
 

158 行
5.5 KiB

using UnityEngine;
using UnityEditor;
using UnityEditorInternal;
[CustomEditor(typeof(DeviceDisplaySettings))]
public class DeviceDisplaySettingsEditor : Editor
{
private DeviceDisplaySettings deviceDisplaySettings;
//Display Name
public SerializedProperty deviceDisplayNameProperty;
//Display Color
public SerializedProperty deviceDisplayColorProperty;
//Icons
public SerializedProperty deviceHasContextIconsProperty;
//Icons - Action Buttons
public SerializedProperty buttonNorthIconProperty;
public SerializedProperty buttonSouthIconProperty;
public SerializedProperty buttonWestIconProperty;
public SerializedProperty buttonEastIconProperty;
//Icon - Triggers
public SerializedProperty triggerRightFrontIconProperty;
public SerializedProperty triggerRightBackIconProperty;
public SerializedProperty triggerLeftFrontIconProperty;
public SerializedProperty triggerLeftBackIconProperty;
//Icon - Custom Contexts
private ReorderableList customInputContextIconList;
void OnEnable()
{
//Display Name
deviceDisplayNameProperty = serializedObject.FindProperty("deviceDisplayName");
//Display Color
deviceDisplayColorProperty = serializedObject.FindProperty("deviceDisplayColor");
//Icons
deviceHasContextIconsProperty = serializedObject.FindProperty("deviceHasContextIcons");
//Icons - Action Buttons
buttonNorthIconProperty = serializedObject.FindProperty("buttonNorthIcon");
buttonSouthIconProperty = serializedObject.FindProperty("buttonSouthIcon");
buttonWestIconProperty = serializedObject.FindProperty("buttonWestIcon");
buttonEastIconProperty = serializedObject.FindProperty("buttonEastIcon");
//Icon - Triggers
triggerRightFrontIconProperty = serializedObject.FindProperty("triggerRightFrontIcon");
triggerRightBackIconProperty = serializedObject.FindProperty("triggerRightBackIcon");
triggerLeftFrontIconProperty = serializedObject.FindProperty("triggerLeftFrontIcon");
triggerLeftBackIconProperty = serializedObject.FindProperty("triggerLeftBackIcon");
DrawCustomContextList();
}
void DrawCustomContextList()
{
customInputContextIconList = new ReorderableList(serializedObject, serializedObject.FindProperty("customContextIcons"), true, true, true, true);
customInputContextIconList.drawHeaderCallback = (Rect rect) => {
EditorGUI.LabelField(CalculateColumn(rect, 1, 15, 0), "Input Binding String");
EditorGUI.LabelField(CalculateColumn(rect, 2, 15, 0), "Display Icon");
};
customInputContextIconList.drawElementCallback = (Rect rect, int index, bool isActive, bool isFocused) => {
var element = customInputContextIconList.serializedProperty.GetArrayElementAtIndex(index);
rect.y += 2;
EditorGUI.PropertyField(CalculateColumn(rect, 1, 0, 0), element.FindPropertyRelative("customInputContextString"), GUIContent.none);
EditorGUI.PropertyField(CalculateColumn(rect, 2, 10, 10), element.FindPropertyRelative("customInputContextIcon"), GUIContent.none);
};
}
public override void OnInspectorGUI()
{
deviceDisplaySettings = (DeviceDisplaySettings)target;
serializedObject.Update();
EditorGUILayout.LabelField("Display Name", EditorStyles.boldLabel);
EditorGUILayout.PropertyField(deviceDisplayNameProperty);
DrawSpaceGUI(2);
EditorGUILayout.LabelField("Display Color", EditorStyles.boldLabel);
EditorGUILayout.PropertyField(deviceDisplayColorProperty);
DrawSpaceGUI(2);
EditorGUILayout.LabelField("Icon Settings", EditorStyles.boldLabel);
EditorGUILayout.PropertyField(deviceHasContextIconsProperty);
if(deviceDisplaySettings.deviceHasContextIcons == true)
{
DrawSpaceGUI(3);
EditorGUILayout.LabelField("Icons - Action Buttons", EditorStyles.boldLabel);
EditorGUILayout.PropertyField(buttonNorthIconProperty);
EditorGUILayout.PropertyField(buttonSouthIconProperty);
EditorGUILayout.PropertyField(buttonWestIconProperty);
EditorGUILayout.PropertyField(buttonEastIconProperty);
DrawSpaceGUI(3);
EditorGUILayout.LabelField("Icons - Triggers", EditorStyles.boldLabel);
EditorGUILayout.PropertyField(triggerRightFrontIconProperty);
EditorGUILayout.PropertyField(triggerRightBackIconProperty);
EditorGUILayout.PropertyField(triggerLeftFrontIconProperty);
EditorGUILayout.PropertyField(triggerLeftBackIconProperty);
DrawSpaceGUI(3);
EditorGUILayout.LabelField("Icons - Custom Contexts", EditorStyles.boldLabel);
customInputContextIconList.DoLayoutList();
}
serializedObject.ApplyModifiedProperties();
}
void DrawSpaceGUI(int amountOfSpace)
{
for(int i = 0; i < amountOfSpace; i++)
{
EditorGUILayout.Space();
}
}
Rect CalculateColumn(Rect rect, int columnNumber, float xPadding, float xWidth)
{
float xPosition = rect.x;
switch (columnNumber)
{
case 1:
xPosition = rect.x + xPadding;
break;
case 2:
xPosition = rect.x + rect.width/2 + xPadding;
break;
}
return new Rect(xPosition, rect.y, rect.width / 2 - xWidth, EditorGUIUtility.singleLineHeight);
}
}