Unity CreateInspectorGUI Перерисовка для отображения кнопокC#

Место общения программистов C#
Ответить
Anonymous
 Unity CreateInspectorGUI Перерисовка для отображения кнопок

Сообщение Anonymous »

Я работаю над программой Unity, в которой есть сеточная система. Я пытаюсь создать собственный редактор для системы сеток. По сути, вы можете изменить размер сетки, отобразить набор кнопок, представляющих сетку, и каждый раз при нажатии кнопки происходит перебор некоторого набора плиток.< /p>
У меня большая часть работает, я просто не могу заставить инспектора перерисовывать сетку при изменении ширины/высоты. Если я запускаю игру, она работает, но не делает это автоматически. Судя по тому, что я могу найти, похоже, что вызвать 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;
}
}
Спасибо за любую помощь, которую вы можете оказать! В худшем случае я перейду на систему IMGUI, но мне бы не хотелось этого делать

Подробнее здесь: https://stackoverflow.com/questions/791 ... ay-buttons
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»