Unity:重用后 Collider 未检测到池化对象

Unity: Pooled Objects not being detected by Collider after reuse

问题是碰撞器没有检测到某些对象。我反对汇集这些游戏对象,以便目前不实例化它们。它们是由波汇集的对象,每个波有 20-30 个对象。

问题在这里:第一波 - 一切都被对撞机的碰撞检测到。 然后第二个和其余的波被对撞机忽略。有些可能会被检测到,但大多数都会被忽略。直到第一波中的所有游戏对象在 OnCollisionEnter 中撞击对撞机时,第二波才会开始。

禁用或启用对象池时没有发生任何不同,我检查了第 1 波和第 2 波中的两个游戏对象,它们都是相同的,自第一次生成以来,刚体和碰撞器都使用默认设置启用。

我错过了什么?为什么只有第一波对象池游戏对象在工作,而不是重复使用的。

private void OnCollisionEnter(Collision collision)
{
    if (collision.transform.GetChild(0).gameObject.tag == "Enemy")
    {
        Debug.Log("P: " + collision.contacts[0].point + " | N: " + collision.contacts[0].normal);

        //  Allow ALL Enemies to not be stopped by Impact
        Physics.IgnoreCollision(collision.collider, GetComponent<Collider>());
    }
}

要生成的对象池代码

GameObject enemy = ObjectPooler.SharedInstance.GetPooledObject("Enemy");
if (enemy!= null)
{
    enemy.SetActive(true);
}

要销毁的对象池代码

enemy.SetActive(false);

P.S。我已经创建了另一个关于这个问题的 post 但在那 post 我认为这是由于另一个问题但它必须是这个问题因为无论我在第一波中有多少对象它们都会得到检测到。只有第 2、3、4 波被忽略。这些波中只有一些被检测到,我猜被检测到的是对象池尚未使用的新游戏对象。请帮忙

当敌人与玩家发生碰撞时(大概),您正在将机器人的碰撞器设置为忽略对方。 但是当你重生敌人时,你并没有重置对撞机之间的无知。你可以通过

Physics.IgnoreCollision(collision.collider, GetComponent<Collider>(), true/false);

其中 true 表示对撞机将相互忽略,false 表示对撞机将相互碰撞。

在 link 阅读更多关于 Physics.IgnoreCollision 的信息。