У меня есть двумерный массив (на основе сетки), и я хочу заполнить его через инспектор. Чтобы дать вам представление об игре
![enter image description here](https://i.stack.imgur.com/bf9Ht.png)
Итак, мой наземный скрипт содержит все эти ячейки.
public class Ground : MonoBehaviour
{
public Cell[,] cells;
private void Start()
{
Debug.Log(cells);
}
}
Из-заФактически, было бы много работы, чтобы управлять всеми этими ячейками и назначить их основному сценарию, который я думал об автоматизации. Поэтому всякий раз, когда я добавляю GameObject (как дочерний элемент) и назначаю ему компонент Cell, Ground должен автоматически добавлять эту ячейку в массив. Чтобы добиться этого, я подумал о создании сценария редактора для инспектора.
[CustomEditor(typeof(Ground))]
public class GroundEditor : Editor
{
public override void OnInspectorGUI()
{
base.OnInspectorGUI();
Ground ground = (Ground)target;
Dictionary<Vector2Int, Cell> cells = new Dictionary<Vector2Int, Cell>();
int maximumHorizontalLength = 0;
int maximumVerticalLength = 0;
foreach (Transform groundCell in ground.transform)
{
Cell cell = groundCell.GetComponent<Cell>();
if (cell != null)
{
Vector3 cellPosition = groundCell.position;
Vector2Int cellIndices = new Vector2Int(Mathf.RoundToInt(cellPosition.x), Mathf.RoundToInt(cellPosition.z));
cells.Add(cellIndices, cell);
if (cellIndices.x > maximumHorizontalLength)
{
maximumHorizontalLength = cellIndices.x;
}
if (cellIndices.y > maximumVerticalLength)
{
maximumVerticalLength = cellIndices.y;
}
}
}
maximumHorizontalLength++;
maximumVerticalLength++;
ground.cells = new Cell[maximumHorizontalLength, maximumVerticalLength];
for (int x = 0; x < maximumHorizontalLength; x++)
{
for (int y = 0; y < maximumVerticalLength; y++)
{
ground.cells[x, y] = cells[new Vector2Int(x, y)];
}
}
}
}
Поэтому я хочу создать эту двумерную сетку перед запуском игры, чтобы сэкономить ресурсы. Я не хочу искать по тегу или типу во время игры. И я думаю, что этот подход экономит время.
К сожалению, при запуске игры Debug.Log печатает ноль. Я надеялся заполнить его этой строкой ground.cells = new Cell[maximumHorizontalLength, maximumVerticalLength];
Я что-то пропустил? Это вообще возможно?