【问题标题】:Destroy object if NOT in collision?如果不发生碰撞,则销毁对象?
【发布时间】:2019-08-04 04:26:42
【问题描述】:

想知道如果不与任何物体发生碰撞,是否有可能摧毁一个物体?

当我开始游戏时,我随机生成一个网格,在每个 GridSquare 上我制作了一个 collider2D。在编辑器中,我在这个网格上手动添加了一些对象,也使用了一个 collider2D 和一个刚体 2D 来检测碰撞。

我知道如果在碰撞中如何销毁对象,我想要的是“当游戏开始时,如果这个对象没有与任何东西发生碰撞,那么就销毁它”

我试图告诉统一“如果与网格正方形发生冲突,则销毁对象(仅用于测试),否则销毁对象”

void OnTriggerEnter2D(Collider2D collision)
{
    if (collision.name == "GridSquare")
    {
        Destroy(gameObject);
    }

    else {
    Destroy(gameObject);
    }
}

所以实际上当它在 GridSquare 上时它会很好地破坏对象,如果它也没有与 GridSquare 发生冲突,它应该破坏对象,但显然不是......

【问题讨论】:

    标签: c# unity3d


    【解决方案1】:
    private var collisionCount = 0;
    
    void OnCollisionEnter () {
        collisionCount++
    }
    
    void OnCollisionExit () {
        collisionCount--;
    }
    
    void checkForCollision(){
    if(0 == collisionCount) Destroy(gameObject);
    }
    

    【讨论】:

      【解决方案2】:

      如果游戏对象没有发生碰撞,则不会为该特定游戏对象激活 OnTriggerEnter2D 方法。请记住,该方法仅在碰撞事件时触发。 对于这种情况,您的游戏对象中可能有一个布尔值 _isColliding,您可以使用 OnTriggerEnter2D 方法更改它以检查正在发生碰撞的对象,并将其设置为 true。

      bool _isColliding = false;
      void OnTriggerEnter2D(Collider2D collision)
      {
          _isColliding = true;
      }
      

      然后循环遍历所有游戏对象并仅销毁具有 _isColliding == false 的游戏对象。

      希望有帮助!

      【讨论】:

        猜你喜欢
        • 2019-08-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多