У меня большая часть работает, я просто не могу заставить инспектора перерисовывать сетку при изменении ширины/высоты. Если я запускаю игру, она работает, но не делает это автоматически. Судя по тому, что я могу найти, похоже, что вызвать CreateInspectorGUI невозможно. Есть ли способ сделать это без использования OnInspectorGUI? Я пытаюсь остаться в системе UIElements, но не уверен, есть ли у меня здесь выбор.
Мой код инспектора показан ниже:
Код: Выделить всё
using UnityEditor;
using UnityEditor.UIElements;
using UnityEngine.UIElements;
[CustomEditor(typeof(GridHolder))]
[CanEditMultipleObjects]
public class Grid_Inspector : Editor
{
SerializedProperty m_Grid_Width;
SerializedProperty m_Grid_Height;
SerializedProperty m_Grid_Size_X;
SerializedProperty m_Grid_Size_Y;
private void OnEnable()
{
m_Grid_Width = serializedObject.FindProperty("gridWidth");
m_Grid_Height = serializedObject.FindProperty("gridHeight");
m_Grid_Size_X = serializedObject.FindProperty("gridXSize");
m_Grid_Size_Y = serializedObject.FindProperty("gridYSize");
}
// public override void OnInspectorGUI()
// {
// EditorGUILayout.PropertyField(m_Grid_Width, new GUIContent("Grid Width"), GUILayout.Height(20));
// serializedObject.ApplyModifiedProperties();
// }
public override VisualElement CreateInspectorGUI()
{
VisualElement container = new VisualElement();
Label title = new Label("Grid Inspector Element");
container.Add(title);
VisualElement gridDimensions = new VisualElement();
gridDimensions.style.flexDirection = FlexDirection.Row;
PropertyField gridWidth = new PropertyField(m_Grid_Width, "Grid Dimensions (X,Y):");
PropertyField gridHeight = new PropertyField(m_Grid_Height);
gridDimensions.TrackPropertyValue(m_Grid_Width, _ => {
UnityEngine.Debug.Log("Hit");
Repaint();
});
gridDimensions.Add(gridWidth);
gridDimensions.Add(gridHeight);
VisualElement gridElementSize = new VisualElement();
gridElementSize.style.flexDirection = FlexDirection.Row;
PropertyField gridXSize = new PropertyField(m_Grid_Size_X, "Grid Size (in meters):");
PropertyField gridYSize = new PropertyField(m_Grid_Size_Y);
gridElementSize.Add(gridXSize);
gridElementSize.Add(gridYSize);
container.Add(gridDimensions);
container.Add(gridElementSize);
// // randomColorButton.style.width = new Length(50, LengthUnit.Pixel);
// // randomColorButton.style.height = new Length(50, LengthUnit.Pixel);
container.Add(DrawGrid());
return container;
}
private VisualElement CreateButton(string text, int sizeX, int sizeY)
{
Button b = new Button() { text = text };
b.style.width = new Length(sizeX, LengthUnit.Pixel);
b.style.height = new Length(sizeY, LengthUnit.Pixel);
return b;
}
private VisualElement DrawGrid()
{
VisualElement container = new VisualElement();
try
{
for(int i = 0; i < m_Grid_Height.intValue; i++)
{
VisualElement row = new VisualElement();
row.style.flexDirection = FlexDirection.Row;
for(int j = 0; j < m_Grid_Width.intValue; j++)
{
//TODO Connect this to the bool array in GridHolder
string text = true?" ":"X";
row.Add(CreateButton(text, 50, 50));
}
container.Add(row);
}
}
catch(System.Exception e)
{
UnityEngine.Debug.LogWarning(e.Message);
}
return container;
}
}
Подробнее здесь: https://stackoverflow.com/questions/791 ... ay-buttons
Мобильная версия