Я создаю двумерную космическую игру в Unity. У меня есть объект под названием «Player» с прикрепленным к нему скриптом. В сценарии, у меня есть класс, представляющий корабль игрока:List.Count Raises Null Reference Exception
public class Ship : MonoBehaviour
{
public List<Weapon> weaponsList;
void Start()
{
weaponsList = new List<Weapon>();
weaponsList.Add(new Weapon());
weaponsList.Add(new Weapon());
}
}
И этот класс (в пределах того же сценария), представляющий собой оружие:
public class Weapon
{
//properties here
}
Теперь, когда я пытаюсь ссылаться weaponsList, чтобы получить List.Count с помощью этого кода (из другого скрипта), он бросает NullReferenceException, говоря ссылка на объект не указывает на экземпляр объекта:
Ship ship = GameObject.Find("Player").GetComponent<Ship>();
if (ship.weaponsList.Count >=2)
{
//do stuff
}
Но любое другое имущество судна Я пытаюсь получить доступ к работам просто отлично. Может кто-нибудь помочь? Если вам нужен дополнительный контекст или код, сообщите мне, и я сделаю необходимые изменения.
EDIT: Метод запуска является особым для Unity и всегда вызывается по умолчанию при инициализации сценария.
Это решило проблему. Я сделал редактирование вопроса о том, что Unity всегда вызывает метод Start(), когда скрипт инициализируется раньше всего, поэтому я предположил, что он будет работать так же, как и конструктор. Спасибо за предложение. –
Это решение вызывает инициализацию 'weaponList' дважды. Если что-то было сделано с 'weaponList', прежде чем вызывать метод' Start() ', это приведет к нечетному поведению. Лучше удалите вторую инициализацию из метода 'Start()' и еще лучше убедитесь, что 'weaponList' может быть инициализирован только один раз и/или только внутри класса' Ship'. –