您最多选择25个主题
主题必须以中文或者字母或数字开头,可以包含连字符 (-),并且长度不得超过35个字符
60 行
2.2 KiB
60 行
2.2 KiB
using UnityEngine.SceneManagement;
|
|
using UnityEngine;
|
|
using UnityEditor;
|
|
using GameplayIngredients.StateMachines;
|
|
|
|
namespace GameplayIngredients.Editor
|
|
{
|
|
[CustomPropertyDrawer(typeof(StateMachineStateAttribute))]
|
|
public class StateMachineStatePropertyDrawer : PropertyDrawer
|
|
{
|
|
public override void OnGUI(Rect position, SerializedProperty property, GUIContent label)
|
|
{
|
|
string propertyName = (attribute as StateMachineStateAttribute).PropertyName;
|
|
StateMachine stateMachine;
|
|
|
|
if (propertyName == "")
|
|
stateMachine = (StateMachine)property.serializedObject.targetObject;
|
|
else
|
|
stateMachine = (StateMachine)property.serializedObject.FindProperty(propertyName).objectReferenceValue;
|
|
|
|
if (stateMachine == null)
|
|
{
|
|
EditorGUI.HelpBox(position, "StateMachineStateAttribute property parameter references a null or not a GameplayIngredients.StateMachines.StateMachine type", MessageType.Error);
|
|
}
|
|
else
|
|
{
|
|
string currentValue = property.stringValue;
|
|
int count = stateMachine.States.Length;
|
|
int[] indices = new int[count];
|
|
GUIContent[] labels = new GUIContent[count];
|
|
int selected = -1;
|
|
for(int i = 0; i< count; i++)
|
|
{
|
|
string stateName = stateMachine.States[i].StateName;
|
|
if (stateName == currentValue)
|
|
selected = i;
|
|
indices[i] = i;
|
|
labels[i] = new GUIContent(stateName);
|
|
|
|
}
|
|
|
|
int newIdx = EditorGUI.IntPopup(position, new GUIContent(property.displayName), selected, labels, indices);
|
|
if(GUI.changed)
|
|
{
|
|
property.stringValue = stateMachine.States[newIdx].StateName;
|
|
}
|
|
}
|
|
}
|
|
|
|
static class Styles
|
|
{
|
|
public static GUIStyle errorfield;
|
|
|
|
static Styles()
|
|
{
|
|
errorfield = new GUIStyle(EditorStyles.objectField);
|
|
}
|
|
}
|
|
}
|
|
}
|