Как показать неровный массив в инспекторе Unity3d? - PullRequest
0 голосов
/ 01 февраля 2019

Я хочу создать зубчатый массив, чтобы упорядочить группу систем путевых точек.Моя проблема в том, что я не знаю, как показать неровный массив в Инспекторе Unity, чтобы я мог заполнять различные массивы нужными игровыми объектами (в основном, квадраты настольной игры).

Игра - это настольная игра с различными путями, которые могут выбирать игроки (например, Mario Party).Чтобы сделать это, вместо создания типичной линейной системы путевых точек (от A до B) я подумал о создании нескольких систем путевых точек, чтобы игроки могли «перепрыгивать» из одной системы путевых точек в другую, когда они достигают перекрестка.Как я уже писал, я не знаю, как показать зубчатый массив в инспекторе, чтобы я мог работать правильно.Я пытался поместить [system.serializable] поверх класса скрипта, но он не работает, массивы просто не появляются.

public Transform[][] waypointSystems = new Transform[][] 
    {
      new Transform[1],
      new Transform[43],
      new Transform[1],
      new Transform[5],
      new Transform[7]
    };

1 Ответ

0 голосов
/ 01 февраля 2019

Быстрый ответ: Вы не можете так просто.Muktidimesnional и зубчатые массивы не сериализуются.

Один из способов может заключаться в переносе одного измерения массива в другой класс, например

[Serializable]
public class TransformArray
{
    public Transform[] Array;

    public TransformArray(Transform[] array)
    {
        Array = array;
    }
}

public TransformArray[] waypointSystems = new TransformArray[]
{
    new TransformArray(new Transform[1]),
    new TransformArray(new Transform[43]),
    new TransformArray(new Transform[1]),
    new TransformArray(new Transform[5]),
    new TransformArray(new Transform[7])
};

В качестве альтернативы вы можете написать [CustomEditor] но что там становится действительно сложно.Возможно, вас заинтересует эта публикация

или попытайтесь внедрить свой собственный инспектор, используя фрагмент кода из этой цепочки в качестве начальной точки

SerializedProperty data = property.FindPropertyRelative("rows");
for (int x = 0; x < data.arraySize; x++) 
{
   // do stuff for each member in the array
   EditorGUI.PropertyField(newPosition, data.GetArrayElementAtIndex(x), GUIContent.none);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...