团结对撞机有时经历其他碰撞器?

时间:2016-05-03 07:15:31

标签: unity3d 2d collision rigid-bodies

我正在尝试为练习创建一个Pong克隆。我用二维设置我的项目。

桨叶具有以下组件:

  • -Rigidbody2D(设为kinematic
  • -BoxCollider2D(trigger

球有以下组成部分:

  • -Rigidbody2D(设为kinematic
  • -CircleCollider2D(trigger

通过拖动控制球拍(用户在屏幕左/右拖动手指)。我为此使用了EasyTouch插件。

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

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

这是我检测到碰撞并重新定向球的方式(水平物体是顶部/底部/桨状,而垂直物体是左/右屏幕边界):

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。但球在某些时候仍然会穿过球拍。

任何人都知道如何解决这个问题?我如何设置/编码游戏我做错了什么?

由于

2 个答案:

答案 0 :(得分:2)

如代码所示,变换由您自己控制,而连续检测需要控制物理引擎,因此请尝试使用物理引擎控制gameObject,而不是使用自己的代码修改位置。

答案 1 :(得分:2)

你有一个非常简单的概念错误。 如果对撞机已进入其他对撞机,则获取OnTriggerEnter2D(Collider2D)。换句话说,你可以浏览对象。

您需要使用此功能:

INSERT INTO "testpoint_location" ("point")
VALUES (Transform(GeomFromText('POINT(15.0 16.0)', 210), 4326))

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

其他信息:http://docs.unity3d.com/ScriptReference/Collider2D.html

感谢。