Как проверить, насколько сильно объект падает на землю и создать вокруг него взрывную «силу» - PullRequest
0 голосов
/ 14 апреля 2019

Недавно я запустил свой первый 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);
        }

Я ожидаю, что если игрок находится в радиусе противника, а противник прыгает, падает и падает на пол, он оттолкнет игрока назад, как если бы это был взрыв.

1 Ответ

0 голосов
/ 14 апреля 2019

Вы можете использовать флаг, который может проверять, если враг падает или нет, поэтому, когда ваш враг фактически падает, установите это как true , если нет (означает перемещение), то установите как ложь.

Проверка скорости является хорошим решением. Так что вы можете сделать, как,

body.velocity.magnitude

// magnitude to remove the direction issue.
// now apply all this as 
body.AddForce(dir.normalized * expForce * calc * body.velocity.magnitude);
...