Код
Army.Add(new PigSquad("The Old Guard", 10, 4));
Где Army представляет собой List<Unit>, а Pigsquad определяется как
public class PigSquad : Unit
{
public override bool Dead { get; set; }
public override string Name { get; set;}
public override int Strength { get; set; }
public override int Age { get { return Age; } set { Age = value; Strength += 20 - Age; if (Age > 20) { Dead = true; } } }
public override int Veterancy { get; set; }
public PigSquad()
{
}
public PigSquad(string Name)
{
this.Name = Name;
}
public PigSquad(string Name, int Strength)
{
this.Name = Name;
this.Strength = Strength;
}
public PigSquad(string Name, int Strength, int Age)
{
this.Name = Name;
this.Strength = Strength;
this.Age = Age;
}
}
Вызывает сбой редактора Unity при запуске. Понятия не имею, почему это так. Любая помощь в этом будет принята с благодарностью.
Установщик и получатель для свойства Age вызывают бесконечную рекурсию, по существу блокируя поток (или всю программу), который пытается установить / получить это свойство. Используйте поле поддержки (назовите его, например, private int _age;) в сочетании со свойством Age.
Спасибо!!! Я потратил буквально часы, пытаясь это исправить.
К вашему сведению: небольшая поправка к моему предыдущему комментарию из-за того, что у меня пердит мозг: хотя бесконечная рекурсия блокирует настройку потока / получение свойства Age, это в конечном итоге (и довольно быстро, на самом деле) вызовет исключение StackOverflowException.
Я также получал исключение переполнения стека, когда я заставлял его работать, это объясняло бы это.





public override int Age { get { return Age; } set { Age = value; Strength += 20 - Age; if (Age > 20) { Dead = true; } } }
должно быть
private int _Age; //maybe make this in your UNIT object as well and that way you do not need it in your child.
public override int Age { get { return _Age; } set { _Age = value; Strength += 20 - _Age; if (Age > 20) { Dead = true; } } }
Как выглядит класс Unit? Это производное от MonoBehavior? Где называется дополнение к списку?