Недавно я запустил свой первый 2D-проект о единстве, и все шло хорошо. Моя единственная проблема до сих пор с моим врагом Мой враг, когда атакует, прыгает в воздухе, а затем падает и падает на землю. Я хочу, чтобы мой сценарий определял, когда он падает и насколько сильно он падает, а затем создает силу, которая отталкивает игрока назад, как будто это «взрыв».
Итак, мои вопросы: как мне обнаружить врага, падающего на землю после падения, и затем добавить силу?
Я пытался использовать onCollisionEnter2D на Unity, но он не работает, поскольку технически, даже когда враг движется, он все еще "падает".
Вот моя попытка проверить, упал ли враг, затем найти игрока и вызвать функцию силы взрыва.
private void OnCollisionEnter2D(Collision2D collision)
{
if(collision.gameObject.tag == "Ground")
{
foreach (Collider2D Obj in Physics2D.OverlapCircleAll(transform.position, radius))
{
if (Obj.GetComponent<Rigidbody2D>() != null && Obj.gameObject != gameObject)
{
Debug.Log("Calling Function");
Rigidbody2D rb = Obj.GetComponent<Rigidbody2D>();
ExplosionForce2D forceScript = GetComponent<ExplosionForce2D>();
forceScript.AddExplosionForce(rb, force, transform.position, radius);
}
}
}
}
Это мой код для добавления силы к объекту.
public void AddExplosionForce (Rigidbody2D body, float expForce, Vector3 expPosition, float expRadius)
{
var dir = (body.transform.position - expPosition);
float calc = 1 - (dir.magnitude / expRadius);
if (calc <= 0) {
calc = 0;
}
body.AddForce (dir.normalized * expForce * calc);
}
Я ожидаю, что если игрок находится в радиусе противника, а противник прыгает, падает и падает на пол, он оттолкнет игрока назад, как если бы это был взрыв.