Лучший способ объявить свойства класса в Unity3D - PullRequest
1 голос
/ 27 июня 2019

Я новичок в разработке Unity 3D, и я хотел знать, каков наилучший способ объявить атрибуты класса, которые будут назначены позже из редактора.Я видел в основном два:

public class MyObject : MonoBehavour {

    public GameObject relatedObect;

}

и

public class MyObject : MonoBehavour {
    [SerializeField]
    private GameObject relatedObect;

}

Я понимаю, что это вторая форма, потому что инкапсуляция сохраняется, но я не уверен.

Ответы [ 3 ]

3 голосов
/ 27 июня 2019

Обратите внимание, что в примере вы объявили класс поля , а не свойства .Они оба являются членами класса, но они совершенно разные.

Ради этого ответа я сосредоточусь на вашем примере, поэтому я расскажу о полях.

Оба public и [SerializeField] private позволяют вводить значение в Unity Inspector, но они действуют по-разному в сценариях.

1 - открытое поле

Вы объявляете открытое поле, когда хотите, чтобы онобыть использованы или установлены из другого класса.Этот выбор противоречит инкапсуляции, потому что другой скрипт может получить к нему доступ.Это все еще может быть предполагаемое поведение, если вы хотите, чтобы поле было доступно.

2 - Закрытое поле [SerializeField]

Это используется, когда вы хотите установить элемент в инспекторе, ноВы не хотите, чтобы другие классы видели это.Эта опция лучше подходит для инкапсуляции, потому что таким образом никакой другой скрипт не может получить доступ или изменить это поле.

0 голосов
/ 27 июня 2019

В дополнение к ответу Джека Мариани, я хочу упомянуть RangeAttribute и HideInInspectorAttribute.


[Range (min, max)]

Если таковой имеется, инспектор покажет слайдер, а не просто число. Вы перемещаете ползунок, и значение изменяется в указанном диапазоне.

[SerializeField] [Range (0, 5)] private float _speed;

Документация


[HideInInspector]

Вы должны использовать его, когда вы не хотите, чтобы переменная public отображалась в инспекторе (они отображаются по умолчанию):

[HideInInspector] public float X;

Документация

0 голосов
/ 27 июня 2019

Во-вторых, это путь, если вы хотите делать вещи «правильно». Но, к сожалению, есть «ошибка», которая выдает предупреждение о каждом приватном наборе, установленном вами в редакторе. Я видел на github, что он наконец-то исправляется, но если вы хотите удалить предупреждение, вы можете поместить свои переменные между pragma warning disable 0649 и pragma warning restore 0649

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