Unity2D Сделать отталкивание врагов при ударе

Есть скрипт удара игрока, когда игрок бьет врага, у него отнимаются жизни, и он должен от него немного "отлететь" от удара, что бы игрок мог потом подойти к нему или отбежать, враг у меня всегда идет к игроку, и останавливается когда бьет его. Как сделать толчок?


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

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

На объект "противник" нужно добавить RigidBody2D. Обязательно нужно указать ненулевое значение параметра Drag, например 1, чтобы после "отскока" противник не начал бесконечно улетать.

В скрипт противника нужно добавить следующий код:

private Rigidbody2D _rBody;

private void Awake()
{
    _rBody = GetComponent<Rigidbody2D>();
}

/// <summary>
/// Отталкивает объект относительно точки с указанной силой
/// <summary>
/// <param name="pushFrom">Точка относительно которой должен отскочить объект</param>
/// <param name="pushPower">Сила с которой должен отскочить объект</param>
public void PushAway(Vector2 pushFrom, float pushPower)
{
    // Если нет прикреплённого Rigidbody2D, то выйдем из функции
    if (_rBody == null || pushPower == 0)
    {
        return;
    }

    // Определяем в каком направлении должен отлететь объект
    // А также нормализуем этот вектор, чтобы можно было точно указать силу "отскока"
    var pushDirection = (pushFrom - transform.position).Normalize();

    // Толкаем объект в нужном направлении с силой pushPower
    _rBody.AddForce(pushDirection * pushPower);
}

После этого в том участке кода, в котором у противника отнимаются жизни нужно вызвать функцию, примерно так:

enemyScript.PushAway(transporm.position, 50f);
→ Ссылка