可拖动对象中的碰撞不起作用

时间:2019-05-21 10:56:40

标签: unity3d collision

我的游戏具有单击并生成对象并使用鼠标移动它们的能力。但是,当这些块与墙壁碰撞时,我希望它们被破坏。我已经以与其他对象相同的方式设置了碰撞,但是似乎没有注册。下面是移动和碰撞的代码。

  void OnMouseDrag()
{
    if (prepPhase == true)
    {
        Vector2 mousePosition = new Vector2(Input.mousePosition.x, Input.mousePosition.y);
        Vector2 objectPosition = Camera.main.ScreenToWorldPoint(mousePosition);

        transform.position = objectPosition;
    }
}


void OnCollisionEnter2D(Collision2D col)
{
    if (col.gameObject.CompareTag("Wall"))
    {
        Destroy(col.gameObject);
        Debug.Log("Collision");
    }
}

每次生成一个新块时,都会创建一个先前对象的克隆。每个克隆都附带此脚本。我还测试了将碰撞提示框附加到墙壁而不是块上,并通过碰撞检测到“阻止”标签。但是它仍然不会破坏物体。

2 个答案:

答案 0 :(得分:0)

您的Destroy没有引用碰撞中的确切游戏对象。相反,请尝试:

Destroy(col.gameObject)

阅读文档:https://docs.unity3d.com/ScriptReference/Collision2D.html

答案 1 :(得分:0)

问题在于您实际上是在通过设置位置来传送对象。这可以防止触发onCollisionEnter2D事件。

您可以通过在if之前放置一条日志语句来确认这一点

void OnCollisionEnter2D(Collision2D col)
{
    Debug.Log("OnCollisionEnter2d Fired");
    if (col.gameObject.CompareTag("Wall"))
    {
        Destroy(col.gameObject);
        Debug.Log("Collision");
    }
}

更改为OnCollisionStay2D应该可以解决问题。

void OnCollisionStay2D(Collision2D col)
{
    if (col.gameObject.CompareTag("Wall"))
    {
        Destroy(col.gameObject);
        Debug.Log("Collision");
    }
}