Игра на 3д движке, но как бы двумерная, персонажи спрайтовые, по этому они никуда не "смотрят", из-за этого не совсем понимаю как сделать отталкивание врага при ударе или персонажа при получении урона. Пытался взять положение игрока и врага, но не придумал как одного от другого оттолкнуть с этими параметрами, не подскажете?
Начало верное, нужно взять координаты двух спрайтов, вычислить между ними разность. Игроку придать импульс с вектором playerPos-enemyPos, а врагу, соответственно, enemyPos-playerPos. Там еще надо нормализовать эти величины и рассчитывать силу импульса по тому, как хочется это видеть в итоге, но это уже детали, которые надо отдельно разбирать)
Добавляйте на объекты box2D или иные collider.
Затем пишете скрипт в котором будет присутствовать void OnTriggerEnter2D () или OnCollisionEnter2D ()
То бишь, данным скриптом будет проверяться столкновение объекта на котором повешен скрипт с другим объектом, который обладает коллайдером. И в данном войде указываете, что делать с объектом на который повешен скрипт. Ну или прописываете взаимодействие сталкиваемого объекта.
Самое простое - взять вектор (Положение объекта 1 - Положение объекта 2) и использовать AddForce с отрицательным знаком (Не забудьте навесить RigidBody на объекты). Ну или прописать затухающее перемещение исключительно TransformPosition.
У меня объект может в 4 направления двигаться и когда я даю ему AddForce по вектору, он только в одну сторону и отталкивается, то есть если все работает при атаке снизу, то при атаке слева враг оттолкнется в ту же сторону
PsyDuckbest, Не очень понял. если честно...
Итак. У нас есть персонаж. К нему слева прилетает пуля. Его должно оттолкнуть вправо, правильно?
Тогда проверяем столкновение и если оно есть, то высчитываем вектор откуда прилетела пуля. Для этого берем местоположение пули и игрока. Пускай игрок в точке (0;0), а пуля слева (-1;0). Вектор высчитывается путем вычитания начальной точки (пуля) из конечной (игрок). Получаем вектор (0 - (-1); 0 - 0), то есть (1;0).
Теперь применяем один из двух вариантов:
1. Напрямую меняем transform игрока: transform.position = transform.position + Vector2 (1;0)
Получается векторы суммируются и игрок оказывается в точке (1;0), то есть справа от начальной. Результат достигнут. Игрок всегда будет перемещаться в позицию противоположной той, откуда прилетела плюха.
2. Применяем AddForce с тем же вектором. Но мне крайне не нравится этот метод, поскольку у косорукого меня он постоянно выдает непредсказуемые баги.