Почему я должен использовать SerializeField? - PullRequest
0 голосов
/ 07 ноября 2018

Я только начал изучать C # и Unity, и есть одна вещь, к которой я не могу привыкнуть:

Почему и когда я должен использовать [SerializeField]?

Плохо ли оставлять переменные жестко запрограммированными, несмотря на использование [SerializeField] и иметь больше текстовых полей в моем интерфейсе Unity?

Заранее благодарю за внимание и терпение.

Ответы [ 2 ]

0 голосов
/ 07 ноября 2018

Почему и когда мне следует использовать [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, вам не придется об этом беспокоиться.

0 голосов
/ 07 ноября 2018

Атрибут [SerializeField] используется для пометки непубличных полей как сериализуемых: так, чтобы Unity могла сохранять и загружать эти значения (все открытые поля по умолчанию сериализуются), даже если они не являются открытыми.

Вот и все, что он делает. Вы используете это, когда хотите этого.

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