Unity: объединенные объекты не обнаруживаются Collider после повторного использования - PullRequest
0 голосов
/ 03 февраля 2020

Проблема в том, что некоторые объекты не обнаруживаются коллайдерами. Я собираю объекты этих игровых объектов, чтобы не создавать их экземпляры в данный момент. Это объекты, объединенные волнами, по 20-30 объектов на волну.

Проблема здесь: Первая волна - все обнаруживается при столкновении коллайдера. Тогда вторая и остальные волны игнорируются коллайдером. Некоторые из них могут быть обнаружены, но большинство игнорируются. Вторая волна не начинается, пока все игровые объекты в первой волне не наберут setActive(false), когда они достигнут коллайдера в 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);

PS Я создал еще один пост об этой проблеме, но в этом посте я думал, что это связано с другой проблемой, но это должна быть эта проблема, потому что независимо от того, сколько объектов у меня в первой волне, все они обнаруживаются. Только 2, 3, 4 волны игнорируются. Только некоторые из этих волн обнаруживаются, и я думаю, что обнаруженные - это новые игровые объекты, которые еще не использовались пулом объектов. Пожалуйста, помогите

1 Ответ

4 голосов
/ 03 февраля 2020

Когда враг сталкивается с игроком (предположительно), вы настраиваете бот-коллайдер игнорировать друг друга. но когда вы возрождаете врага, вы не сбрасываете невежество между ботами коллайдерами. Вы можете сделать это с помощью

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

, где true означает, что коллайдер будет игнорировать друг друга, а false означает, что коллайдер столкнется друг с другом.

Подробнее о Physics.IgnoreCollision по ссылке.

...