如何检查物体撞击地面的难度,并在其周围产生爆炸性的“力”

问题描述 投票:0回答:1

最近我开始了我的第一个关于团结的2D游戏项目,一切都进展顺利。到目前为止我唯一的问题是我的敌人。我的敌人在进攻时会跳到空中,然后跌落并击中地面。我希望我的脚本能够检测到它何时落下以及它的下降有多大,然后创建一个将玩家推回的力,就好像它是一个“爆炸”。

所以我的问题是如何在摔倒后如何发现敌人撞击地面,然后再增加力量?

我尝试在Unity上使用onCollisionEnter2D,但从技术上讲,即使敌人移动它仍然“摔倒”,它也无法工作。

这是我尝试检查敌人是否倒下然后搜索玩家并调用爆炸力函数。

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

我希望,如果玩家处于敌人的半径范围内,并且敌人跳跃,摔倒并撞击地板,它将把玩家推回去,好像它是爆炸一样。

c# unity3d 2d game-physics physics
1个回答
0
投票

你可以使用一个标志,可以检查敌人是否在下降,所以当你的敌人实际下降时,设置为真,如果不是(意味着移动),则设置为假。

检查速度是一个很好的解决方案。所以你可以这样做,

body.velocity.magnitude

// magnitude to remove the direction issue.
// now apply all this as 
body.AddForce(dir.normalized * expForce * calc * body.velocity.magnitude);
© www.soinside.com 2019 - 2024. All rights reserved.