【问题标题】:OnCollisionEnter() not working in Unity3DOnCollisionEnter() 在 Unity3D 中不起作用
【发布时间】:2021-05-13 21:42:35
【问题描述】:

我有一个带有网格碰撞器的对象和一个带有球体碰撞器的预制件。如果两者发生碰撞,我希望预制件的实例被销毁。

我在脚本中写了以下内容:

private void OnCollisionEnter(Collision c)
{
    if (c == target)
        Destroy(transform.gameObject);
    print("something");                   // Doesn't get printed
}

但它不起作用。我尝试在两个对象上切换isTrigger

【问题讨论】:

  • 你确定对撞机正在进入/相互碰撞吗?
  • target 是什么类型?我认为c==target 永远不会是true,但您仍然应该打印您的信息。您可能正在寻找c.gameObject == targetdocs.unity3d.com/Documentation/ScriptReference/…
  • 对撞机相互交叉,我在场景视图中从不同的角度看到。

标签: c# unity3d


【解决方案1】:

我遇到了同样的问题,OnCollisionEnter 没有被调用并找到了这个问题。

对我来说,问题在于我正在制作 2D 游戏,所以答案是改用 OnCollisionEnter2D 函数。

【讨论】:

  • 除了你之外,整个互联网上没有人提到这个。
  • 谢谢! Collsion collsion 参数也必须是 Collision2D
  • 我一直在寻找和寻找,我的英雄们在这里......神圣的钼。
  • Narrowstrife 提到 OnTriggerEnter 也需要一个 2D 后缀
【解决方案2】:

看看this table

如果您希望您的 OnCollisionEnter 被调用,请确保:

(a) 两个对象都附加了一个碰撞器。

(b) 没有一个对象是触发对撞机(这将发出 OnTrigger 函数而不是 OnCollisionEnter)

(c) 其中一个对象(不管是哪一个)是刚性、非运动学和非静态对象(第二个不必是刚体)。

(d) 由于计算困难,MeshCollider 可能很难与其他网格碰撞器发生碰撞,请谨慎使用。

(e) 确保两个对象在同一层(或至少它们在场景设置中发生碰撞)。

(f) 如果您在 2d 中工作 - OnCollisionEnter2D 将被调用,请重命名您的函数。

【讨论】:

    【解决方案3】:

    确保其中一个连接了非运动学刚体。摘自 Unity 文档:

    当两个 Collider 之间发生碰撞并且如果其中至少一个附加了刚体,则会向附加到它们的对象发送三个碰撞消息。这些事件可以在脚本中处理,并允许您在使用或不使用内置 NVIDIA PhysX 引擎的情况下创建独特的行为。

    从这里:Unity3D MeshCollider

    【讨论】:

    • 我在没有重力的情况下向对象添加了非运动学刚体。出现了一些错误,说: Actor::updateMassFromShapes: 计算一个演员的网格形状的网格惯性张量失败!请更改网格几何形状或手动提供张量!
    • 在我的项目中,球体是静止的,而另一个对象移动只是因为它是另一个对象的子对象,它只能通过变换和旋转来移动。
    • 网格形状错误可能意味着您的网格无法转换为良好的物理刚体。你能用一个原始的网格替换网格,看看是否有帮助?
    【解决方案4】:

    您是否尝试过使用 OnTriggerEnter() 方法并将对象上的碰撞器设置为触发器?

    如果它不需要告诉它与什么物体发生碰撞,你可以做一个简单的

    void OnTriggerEnter(){
        Destroy(transform.gameObject);
    }
    

    编辑:

    我也做过这样的 OnCollision

    private string hitobject;
    
    void OnCollisionEnter(UnityEngine.Collision hit)
    {
        hitobject = hit.gameObject.tag;
        if(hitobject == "Plane")
        {
            isgrounded = true;
        }
    }
    

    所有物体都不是触发器,它们不需要刚体来工作。

    【讨论】:

      【解决方案5】:

      我遇到了类似的问题。盒子对撞机没有碰撞对象那么大。将 x 和 z 值设置为 2 个单位即可解决问题!

      【讨论】:

      • 谢谢@Karessa,您可以提供任何代码作为示例来增强您的答案吗?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-04-16
      • 1970-01-01
      • 2014-08-14
      • 1970-01-01
      相关资源
      最近更新 更多