PlayerHealth также не совсем верно, так как Health это скрипт для абсолютно всех объектов, которые хоть как то лечатся или калечатся. Если тебе нужно как то уникально обработать Health для игрока, ты либо наследуешься от базового Health, либо создаешь еще один скрипт и подписываешься на OnChange в Health
Если это не влияет на других пользователей (у них не тормозит в это время) и правится при полном обновлении страницы, то возможно, JS что-то делает тяжелое на фоне.
Зависит от геймплея, если персонажи сталкиваются друг с другом как физические объекты, то коллайдер для OnTriggerEnter2D нужно делать больше, чем коллайдер физический, а это не всегда хорошо выглядит (обычно в играх его делают его намного меньше, чем персонаж). В этом случаем нужно на OnCollisionEnter2D, чтобы урон наносился при физическом касании.
Если персонажи проходят сквозь друг-друга, то лучше конечно OnTriggerEnter2D.
В любом случае не нужно наносить урону противнику в скрипте на игроке. Каждый скрипт наносит урон самому себе, так как OnTriggerEnter2D/OnCollisionEnter2D вызовется и там, и там.
Тогда зачем направление учитывать с которого произошла атака, если правило простое - попал в коллайдер - получил урон. Сама функция OnCollisionEnter2D вызовется только при повторном столкновении.
Gregory256, Первый элемент из всех найденных, который удовлетворяет условию, что у них одинаковая категория и что он лидер. Используется LINQ для этого.
Есть две причины.
1) Сторонний плагин, вроде Play Mode Save встроен в проект и сохраняет автоматически.
2) Баг в самом Unity.
В первом случае надо проверить пустой проект, если все ок - то искать плагин, который за это отвечает.
Во втором случае - просто поставить новую версию Unity или переустановить текущую.