Почему иногда вам нужно создать новый список, а иногда нет в Unity? - PullRequest
0 голосов
/ 11 октября 2018

Итак, я обновил проект до другого.

В первом проекте префабы уже были в сцене, и я вручную настроил все компоненты и скрипты на них.

Во втором проекте префабы были созданы скриптом во время выполнения иМне пришлось добавить все через скрипт.

У меня не было особых проблем, пока я не попал в скрипт, который имел публичный список.Когда код запускался, он давал мне нулевую ссылку каждый раз, когда вызывался список.

Так что после копания, проб и ошибок я обнаружил, что вместо простого объявления списка (общедоступного списка независимо от того;) мне пришлось создавать экземплярэто (общедоступный список, какой бы то ни было = новый список).

Я рад, что нашел решение, , но я не понимаю его , и это меня беспокоит.Почему я должен был создать новый список во втором проекте?

Ответы [ 3 ]

0 голосов
/ 11 октября 2018

Объявление списка означает, что у созданного вами класса есть список, но он по-прежнему не имеет значения по умолчанию.Чтобы список можно было использовать, нужно создать его экземпляр, назначив = new List<Data>.

0 голосов
/ 11 октября 2018

Когда вы вручную добавляете сценарий к игровому объекту в редакторе Unity, Unity инициализирует этот общедоступный список в пустой список.Затем он будет сериализовать этот пустой список.Когда вы создаете экземпляр префаба, созданного вручную, он уже будет содержать этот пустой список, который редактор сериализовал.

0 голосов
/ 11 октября 2018

разница между тем, чтобы сказать, что у вас есть картинка (ссылка) или ваша на месте (экземпляр), воспринимает это так.допустим, что список не был списком, это был просто int.

Я могу сказать, int i;

, и у меня есть ссылка, но ссылка пуста, то есть она не имеет значения.

но если я скажу int i = 0;

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

В общем, говоря: List<Item> list;

, а не List list = new List<Item>()

означает, что вы объявили эту переменную и распределили пространство в памяти, но это ничего не значит, покаВы назначаете значение.надеюсь, это поможет.

Вы не можете использовать неинициализированные переменные в C #.Вы можете инициализировать переменную значением по умолчанию ее типа.Вы также можете использовать значение по умолчанию для типа, чтобы указать значение по умолчанию для необязательного аргумента метода.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...