Как правильно работать с полями в Unity?

insert_comment 2
visibility 471
|
21.05.2020

Все разработчики используют поля, но достаточно часто в различных обучающих видео на YouTube, а иногда даже и в платных курсах разработчики допускают достаточно грубые ошибки при работе с ними.
Но мы с вами поговорим сегодня не просто про работу с полями, а про работу с полями в Unity!

Ошибки при работе с полями

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

Давайте разберем с вами небольшой пример.

Как правильно работать с полями в Unity?, изображение №1
 

Сверху вы можете видеть скрипт игрока.
Предположим, что разработчик решил сделать следующее — враг при приближении к нам начинает наносить нам урон напрямую изменяя поле Health, также у него есть Transform death, это точка в которой будет создан эффект смерти и bool _flag при помощи которого мы можем узнать мертв ли игрок.

Первое с чем вы можете ошибиться — это именование поля.
Имя поля всегда должно отражать суть того, что это поле в себе будет хранить.

Если мы проанализируем код, то сразу станет понятно, что единственное хорошее поле в данном скрипте это Health, по его имени нам ясно, что оно хранит текущее здоровье нашего игрока.

Дальше у нас идет поле death, и по его имени не совсем понятно, что оно должно хранить. Точка смерти? И никто кроме разработчика с первого взгляда не поймет что хранит поле. Так как мы знаем, что разработчик хочет использовать это поле для хранения точки спауна эффекта смерти, то мы можем сказать, что имя DeathEffectPoint подойдет намного лучше, оно будет отражать суть.

И последним является поле _flag. Что это флаг у нас и так понятно из типа boolean, но вот что это за флаг нам никогда не узнать.
Если это флаг мертвы мы или нет, то нам следует четкое его назвать, к примеру IsAlive.

Про именование мы поговорили, давайте теперь поговорим о стилистике.
Стилистика также отражает планы программиста на определенное поле и если сейчас мы посмотрим на скрипт, то увидим, что три поля названы в трех стилистиках.

  • Health — с большой буквы
  • death — с маленькой буквы
  • _flag — с нижнего подчеркивания и маленькой буквы

Запомните. Публичные поля всегда называются с большой буквы! Именование с маленькой буквы или с нижнего подчеркивания доступны только тогда, когда поле с модификатором private.

Последнее на что хочется обратить внимание — все поля публичные, что не является правильным.
Конечно, если поле публичное, то оно отображается в инспекторе. Но не стоит забывать, что помимо инспектора оно также доступно и из других скриптов. Не просто доступно, а вы можете его редактировать как вам захочется. И конечно же вам захочется его изменить, вы начнете его вручную менять, жизни станут отрицательными, а тот же bool IsAlive вы забудете сменить и он не будет отражать то, что вы мертвы.

Как же будет правильно?

Как правильно работать с полями в Unity?, изображение №2
 

Что же мы сделали?

  • Health мы сделали private и он перестал быть доступным из других компонентов, но мы сохранили возможность установки значения из инспектора добавив атрибут SerializeField
  • Точку спауна эффекта мы также переименовали, сменили модификатор доступа и добавили атрибут.
  • А вот IsAlive мы теперь сделали публичным свойством. Оно доступно только для чтения и возвращает true или false в зависимости от значения поля health.

Но как же нам нанести урон нашему игроку? Ведь раньше он наносился через изменения поля, а сейчас оно закрыто.

Как правильно работать с полями в Unity?, изображение №3
 

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

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

Если мы хотим читать поле из других компонентов, то мы можем сделать свойство. Но если мы сделаем из поля Health публичное свойство, то через инспектор с ним работать не сможем.
Из этой ситуации также есть выход, мы можем оформить свойство на чтение следующим образом

Как правильно работать с полями в Unity?, изображение №4
 

Как же стать лучше и писать код более качественно?

Сегодня мы с вами разобрали как правильно работать с полями в Unity и вы уже стали намного лучше!

Хотите ещё больше правильного и грамотного кода?
В этом случае вам стоит присмотреться к нашим курсам C# Базовый и Unity Базовый, ведь в этих курсах мы с самого нуля направим ваше развитие в правильное русло и научим писать код, а не копировать за другими!

Обучение с нуля до первой зарплаты — вам сюда!

7 курсов бесплатно

Начните карьеру разработчика игр бесплатно!


    Комментарии
    Максим Панов
    Как правильно загуглить, чтобы узнать больше вот о этой строчке ? public float Health => _health; оператор => это ведь лямда выражение ?
    insert_comment 1
    |
    Ответить


    Отзывы