Отталкивание персонажа в разные стороны при столкновении с врагом

Мне нужно реализовать отталкивание персонажа в разные стороны при столкновении с врагом. То есть допустим если персонаж дотронулся до левой части врага, то его должно откинуть назад. Так же и с правой стороной врага. С левой-то я сделал, но теперь когда персонаж прикасается с правой стороны врага, его кидает вперед к врагу. Можно предложить решение этой проблемой как угодно: с помощью лучей, с 2-я коллайдерами, с bool переменной и т.д. Буду рад любому ответу. Надеюсь на вашу помощь. введите сюда описание изображениявведите сюда описание изображения


Ответы (1 шт):

Автор решения: nipercop

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

if(collision.gameObject.CompareTag("Enemy")){
   Vector3 backwardDirection = transform.position - collision.transform.position;
   backwardDirection.z = 0; // обнуляем разницу по оси Z (скорее всего в этом нет необходимости, но можно оставить разве что на всякий случай)
   backwardDirection.y = Mathf.Abs (backwardDirection.y); // Делаем значение по вертикали всегда положительной (тут можете установить свое желаемое значение)
   // Это надо когда ваш персонаж врезается во врага снизу, то его отбрасывало по вертикане не вниз, а вверх (как это реализовано в игра на денди или сега, чип и дейл, соник и прочие)
   rb.AddForce(backwardDirection, ForceMode2D.Impulse);
}
→ Ссылка