首页 > 解决方案 > 我的 AddForce 方法不起作用或推动 Rigidbody2D

问题描述

这是我的第一个问题,我是游戏开发的新手,所以如果有点愚蠢,请不要强硬。

我的问题是我在敌人脚本上检测到我的敌人和我的玩家之间的碰撞,我希望它将玩家向后推回碰撞点。

void OnCollisionEnter2D(Collision2D collision)
    {
        if (collision.gameObject.tag == "Player")
        {
            float force = 200f;
            Vector3 dir = (Vector3)collision.contacts[0].point - transform.position;
            dir = -dir.normalized;
            collision.gameObject.GetComponent<Rigidbody2D>().velocity += (Vector2)dir * force;
            Debug.Log("Collided");
        }
    }

一旦它发生碰撞,我会在控制台上获得 debug.log 信息。但是没有任何力量施加在它上面。

我也尝试使用 AddForce 方法,但它都不起作用。

我有点卡在代码上,但我希望其他人可以帮助我找出问题所在。

标签: unity3d

解决方案


我的猜测是您在全局空间中添加了速度,但您使用的碰撞点在本地空间中。我的解决方案是使用以下公式来计算方向。

Vector3 dir = collision.transform.position - transform.position;
dir = dir.normalized;

因为这里我使用两个对象的位置(即全局)来计算方向向量,所以我的结果也会在全局空间中。

我的建议是,你总是在什么空间(相对于对象或相对于世界原点)思考你使用的坐标。我希望这能解决你的问题。


推荐阅读