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);