Unity Tutorial: Разбор кода и уроки масштабирования

Разберем код из обучающего проекта Unity, поставляемого с движком. Проект позиционируется как пример для начинающих, но содержит множество ошибок и не соответствует современным стандартам. Рассмотрим как хорошие, так и плохие примеры, чтобы показать, что официальные материалы не всегда являются эталоном.

Менеджеры: проблема масштабируемости

Использование множества менеджеров (аудиоменеджер, game flow менеджер и др.) – плохая практика. Архитектура на основе менеджеров, где компоненты взаимодействуют через вызовы методов, неэффективна. Методы аудиоменеджера лучше реализовать как методы расширения для AudioSource. Вызовы корутин через строку (StartCoroutine("MethodName")) следует заменить на прямой вызов метода или использование nameof(), чтобы предотвратить ошибки из-за опечаток.

Game flow менеджер – слишком большой класс, пытающийся делать всё сразу, что снижает читаемость и поддерживаемость кода.

Нарушение соглашений об именовании и доступе к полям

Нарушены правила именования полей: публичные поля (изменяемые через инспектор) должны начинаться с маленькой буквы, приватные – с нижнего подчеркивания. В коде используются разные стили (поля с маленькой буквой, с префиксом m_, статические поля с префиксом s_). Модификаторы доступа указаны несогласованно; даже при явном public, следует указывать модификатор явно. Свойства должны идти после полей, а не смешиваться с ними.

Стилистические несоответствия и неэффективность

Стиль написания кода непоследователен: фигурные скобки ставятся по-разному, имена методов написаны в разном регистре. Присутствуют неиспользуемые фрагменты кода, что указывает на плохое планирование и контроль качества.

Архитектурные решения: объектный менеджер

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

FPS контроллер и другие элементы

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

Replacement – структура, фактически ничего не делающая и не используемая в коде. Time Manager содержит нелогичные элементы, неиспользуемые методы и непоследовательные подходы.

Туториал содержит интересные примеры использования Unity, но качество кода низкое. Множество стилистических и архитектурных ошибок, неиспользуемый код делают его непригодным для обучения профессиональному программированию. Для новичков он может подойти для ознакомления, но для серьёзного изучения лучше использовать другие ресурсы.

Что будем искать? Например,программа