碰撞检测- Unity 2D c# -碰撞器不工作

本文关键字:工作 碰撞 Unity 2D 碰撞检测 | 更新日期: 2023-09-27 17:53:00

我正在制作2D TopDown游戏Unity 5。碰撞根本不起作用。玩家和障碍都有一个2D Collider,它们不是Trigger。玩家有一个2D刚体,其中运动学设置为重力比例等于。也许和移动代码有关。这段代码有点长,所以我给你们看一下向上移动的代码:

if (Input.GetAxis ("Up") > 0) {
    if (movingDown == false) {
        posY += speed * Time.deltaTime;
        movingUp = true;
    }
} else {
    movingUp = false;
}

/…/

transform.position = new Vector3 (posX, posY, 0);

它总是设置位置的值,只要你按下向上按钮。有办法解决这个问题吗?

碰撞检测- Unity 2D c# -碰撞器不工作

我认为问题在于你直接设置了位置。所以在每一帧中,你都在告诉unity物体的确切位置,这将覆盖从碰撞中计算出的位置。

要解决这个问题,你需要修改你的移动代码添加一个力到你的刚体,并保持位置不变(见刚体文档,和函数AddForce (https://docs.unity3d.com/ScriptReference/Rigidbody.html)

尝试使用

    rb.velocity = new Vector3 (rb.velocity.x, rb.velocity.y, ConstantZValue);

这将用基于速度的系统替换您的系统,因为不建议更新刚体的transform.postition。对于您的系统,没有检测到碰撞,因为rigidbody没有更新。