Я получаю исключение нулевой ссылки, когда пытаюсь добавить регион в список и понятия не имею, что я делаю неправильно. Я просто не могу понять это, и я делал это миллион раз.
public List<Region> regions;
public class Region
{
public int x_size;
public int y_size;
public enum terrain
{
desert,
lowlands,
crater,
city
};
public terrain ground;
}
private void NewRegion()
{
Region thisRegion = new Region();
thisRegion.x_size = Random.Range(25, 50);
thisRegion.y_size = Random.Range(25, 50);
thisRegion.ground = Region.terrain.desert;
regions.Add(thisRegion);
}
Вы просто не создали свой список Region
(регионов), поэтому он нулевой. Посмотрите на часть new List<Region>()
:
public List<Region> regions = new List<Region>();
public class Region
{
public int x_size;
public int y_size;
public enum terrain
{
desert,
lowlands,
crater,
city
};
public terrain ground;
}
private void NewRegion()
{
Region thisRegion = new Region();
thisRegion.x_size = Random.Range(25, 50);
thisRegion.y_size = Random.Range(25, 50);
thisRegion.ground = Region.terrain.desert;
regions.Add(thisRegion);
}
Список regions
пуст, в него нельзя ничего добавить. В Start()
сделать:
regions = new List<Region> ();
Вы должны сделать Region
тип [Serilizable]
:
[Serializable]
public class Region
{
public int x_size;
public int y_size;
public enum terrain
{
desert,
lowlands,
crater,
city
};
public terrain ground;
}
Поскольку поле regions
равно public
, оно будет автоматически серилизовано и инициализировано инспектором Unity в любом случае если бы Region
был сериализуемым.
Так что теперь верхний код будет иметь два преимущества
Вам не обязательно иметь код
region = new List<Region>();
нигде. Он будет автоматически инициализирован Unity.
Тем не менее, рекомендуется иметь его, но я бы не стал делать это в Start
, а просто хотел
public List<Region> regions = new List<Region>();
Другим действительно огромным преимуществом является то, что теперь вы должны увидеть этот список в инспекторе Unity, чтобы вы могли прямо из редактора добавлять и настраивать элементы без необходимости их жесткого кодирования с помощью скрипта.