Данный анализ рассматривает распространенные ошибки начинающих программистов C# в контексте Unity на примерах кода. Разбор показывает пути оптимизации, подчеркивая принципы чистого кода и эффективного проектирования.
Player и смена песен
Пример реализации Player для смены песен содержит два класса: Song и SoundList, связанных перекрестными ссылками — плохая практика. Рекомендуется использовать медиатор для взаимодействия.
Название класса Song не отражает его функции, которая сводится к визуальному представлению песни. Более подходящими названиями будут SongPresenter или PlayerPresenter.
Класс SoundList, используемый только для получения имени песни, избыточен. Имя песни можно передавать напрямую. Для упрощения достаточно передавать name.
Избыточное поле songPrefab также можно удалить. Имя песни можно использовать для отображения информации в текстовом поле. Композиция упростит код.
// Улучшенный код
public class SongPresenter
{
public string Name { get; set; }
// ... другие поля ...
}
Спавнер сущностей
Следующий пример демонстрирует спавнер, использующий множество событий для спавна разных типов сущностей. Это избыточно.
Использование отдельных событий для каждого типа сущности приводит к дублированию кода в обработчиках. Эффективнее использовать одно событие с параметрами, определяющими тип сущности.
Лучше использовать один метод спавна с параметром, определяющим тип сущности. Это можно реализовать с помощью словаря, связывающего тип сущности с методом спавна.
// Улучшенный код с использованием словаря
private Dictionary<Type, Action<Vector3>> spawners = new Dictionary<Type, Action<Vector3>>();
// ... в методе инициализации ...
spawners.Add(typeof(Enemy), SpawnEnemy);
spawners.Add(typeof(Player), SpawnPlayer);
// ... метод спавна ...
public void Spawn(Type type, Vector3 position)
{
if (spawners.ContainsKey(type))
{
spawners[type](position);
}
}
Эта реализация более масштабируема. Вместо множества событий и обработчиков используется один метод Spawn и словарь для сопоставления типов с методами спавна. Дублирование кода в инициализации разных типов можно устранить, используя фабричный метод или полиморфизм.
Приведенные примеры иллюстрируют типичные ошибки начинающих разработчиков Unity на C#: избыточные классы и перекрестные ссылки, неэффективное использование событий и дублирование кода. Правильная организация кода и использование подходящих паттернов проектирования (фабричный метод, медиатор) улучшают читаемость, масштабируемость и поддерживаемость проекта.