Разделять код на миллион монобехов != ооп.
AudioPlayer вообще какой-то ужас. Во-первых, почему GameObject takeDamageSourseObject и т.д Почему GameObject, если ты потом получаешь у него компонент AudioSource, ты можешь конкретные компоненты в инспекторе передавать, т.е. не GameObject, a AudioSource и GetComponent потом делать не нужно будет.
Во-вторых, из всего этого можно было сделать один компонент, в котором будет один метод Play, который будет принимать AudioSource и проигрывать его.
Нет какого-то единого кодстайла, где-то есть нижнее подчеркивание, где-то нет, где-то есть _cs где-то нет, для чего эта _cs я так и не понял. Где-то сериализуемое приватное поле, где-то тупо паблик.
Про солид вообще смысла говорить нет. Интерфейсов пара штук на весь проект.
Зависимости нормально не прокидываются, всё через поля.
Если цель есть:
Если могу атаковать цель:
атаковать();
перестать идти к цели();
Если не могу атаковать:
идти к цели();
Если цели нету:
Если lastPosition != Vector3.zero:
идем к ней();
если к ней пришли:
lastPosition == Vector3.zero
Иначе
Если не могу найти цель (бот противоположной команды-игрок противоположной команды):
Если есть главная цель:
идти к главной цели();
Если нету главной цели:
Рандомное хождение();
if (Current == Min) Over?.Invoke();что делает эта строка?
public event Action Over;зачем тут событие, если можно напрямую вызывать функцию?
public interface IMutableи
{
T Current { get; }
}
T Current- что это такое и зачем оно нужно?
void Update()
{
angle = Vector2.SignedAngle(transform.position, player.position);
float rayToPlayerLeght = Physics2D.Raycast(transform.position, player.position - transform.forward).distance;
if (angle < maxAngle)
{
policeCarMove_cs.Left();
}
else if (angle > -maxAngle)
{
policeCarMove_cs.Right();
}
policeCarMove_cs.MoveForward();
}
if (angle < maxAngle)
{
policeCarMove_cs.Left();
}
else if (angle > -maxAngle)
{
policeCarMove_cs.Right();
}