Unity 对撞机有时会经过其他对撞机?

Unity collider going through other colliders at times?

我正在尝试创建一个 Pong 克隆来练习。我在 2D 中设置我的项目。

桨有以下组件:

球有以下组成部分:

桨是通过拖动来控制的(用户在屏幕上拖动手指 left/right)。为此,我使用了 EasyTouch 插件。

然后我用这个脚本移动球:

void Update () {
        transform.position += new Vector3(xSpeed * Time.deltaTime, ySpeed * Time.deltaTime);
    }

这就是我检测碰撞并在球撞到某物后重定向球的方式(水平对象是 top/bottom/paddle,而垂直对象是 left/right 屏幕边框):

void OnTriggerEnter2D(Collider2D c)
    {
        if(c.gameObject.tag.Equals("Horizontal"))
        {
            ySpeed *= -1;
        }
        else if(c.gameObject.tag.Equals("Vertical"))
        {
            xSpeed *= -1;
        }

    }

问题是有时球会穿过球拍,这对最终用户来说可能看起来有点问题。我在网上搜索过这个,我试图将刚体的 Collision Detection 属性 设置为 Continuous 而不是 Discrete。但是球在某些时候仍然会穿过球拍。

有人知道怎么解决吗? setup/coded 我的游戏有什么问题?

谢谢

如代码所示,变换是自己控制的,而连续检测需要物理引擎控制,所以尽量用物理引擎控制gameObject,而不是给它一个自己代码修改的位置。

你有一个非常简单的概念错误。 OnTriggerEnter2D(Collider2D) 是获取对撞机是否进入了其他对撞机。换句话说,你可以遍历对象。

您需要改用此功能:

OnCollisionEnter2D(Collision2D coll)

我建议您观看这个 Unity 教程,因为它解释得非常好:https://unity3d.com/learn/tutorials/modules/beginner/physics/colliders

附加信息:http://docs.unity3d.com/ScriptReference/Collider2D.html

谢谢。