Почему и когда мне следует использовать [SerializeField]?
Использование атрибута SerializeField
заставляет Unity сериализовать любую переменную private
. Это не относится к статическим переменным и свойствам в C #.
Вы используете атрибут SerializeField
, когда ваша переменная должна быть private
, но вы также хотите, чтобы она отображалась в редакторе.
Например, этот не будет отображаться в редакторе:
private float score;
И это потому, что это переменная private
, но приведенная ниже должна появиться в редакторе:
[SerializeField]
private float score;
Это потому, что вы применили SerializeField
к нему и говорите Unity, чтобы сериализовать его и показать в редакторе.
Обратите внимание, что private
переменные больше связаны с C #, чем с Unity. Есть также публичные переменные переменные. Пометка вашей переменной private
означает, что вы не хотите, чтобы другой скрипт имел доступ к этой переменной. Существует также public
квалификатор. Пометка вашей переменной public
означает, что вы хотите, чтобы другие сценарии имели доступ к этой переменной.
Иногда вы хотите, чтобы другие скрипты могли обращаться к вашей переменной из другого скрипта, но вы не хотите, чтобы переменная public
отображалась в редакторе. Вы можете скрыть переменную public
с атрибутом [HideInInspector]
.
Это будет показано в редакторе:
public float score;
Это не будет показывать в редакторе:
[HideInInspector]
public float score;
Плохо ли оставлять переменные жестко закодированными, несмотря на использование [SerializeField]
и есть больше текстовых полей в моем интерфейсе единства?
Да, это в основном плохо, особенно для новых пользователей. Это не должно быть большим делом в течение долгого времени программист Unity и C #. Причина в том, что это плохо, потому что когда у вас есть код ниже:
[SerializeField]
private float score = 5f;
Значение по умолчанию 5
в редакторе. После сохранения сценария эта переменная теперь обновляется в редакторе как 5. Проблема в том, что вы можете изменить это значение из редактора на 14
. После того, как вы измените его из редактора, значение в скрипте все равно будет 5
, но когда вы запустите его, Unity будет использовать значение, установленное вами в редакторе, которое составляет 14
. Это может отнять у вас много времени на поиск и устранение неисправностей, что даже не является проблемой только потому, что в редакторе используется другое значение, установленное в то время, как вы ожидаете использовать значение по умолчанию, установленное в сценарии.
Единственный способ для переменной score
вернуться к значениям по умолчанию 5
- это когда вы либо переименовываете переменную в другое значение, либо сбрасываете ее из редактора. Он даже не изменится, даже если вы измените значение с 5
на 3
из сценария. Он должен быть переименован или сброшен из редактора. Это стоит знать, но когда вы привыкнете к Unity, вам не придется об этом беспокоиться.