Bulletsharp DiscreteDynamicsWorld RemoveRigidBody ведет себя странно

Я добавляю и удаляю RigidBodies в DiscreteDynamicsWorld. Если я просто добавляю одно тело за раз и удаляю его снова, это работает как ожидалось.

Если я добавляю больше тел (3-5) одновременно и удаляю некоторые из них снова, это иногда приводит к удалению неправильных предметов.

У меня ушло около дня, чтобы достичь желаемого результата, но я не понимаю, почему он не работает по-другому.

Код:

private ConcurrentBag<RigidBody> _toRemove = new ConcurrentBag<RigidBody>();

while (!_toRemove.IsEmpty)
{
    RigidBody body;
    if (_toRemove.TryTake(out body))
    {    
        //Not working
        InternWorld.RemoveRigidBody(body);

        //also not working
        InternWorld.CollisionObjectArray.Remove(body);

        //working
        for (int i = 0; i < InternWorld.CollisionObjectArray.Count; i++)
        {                        
            if(body == InternWorld.CollisionObjectArray[i])
            {
                InternWorld.CollisionObjectArray.RemoveAt(i);
                break;
            }
        }
    }
}

Кто-нибудь может объяснить, почему первые два способа не работают? Это ошибка в bullet/bulletsharp или я что-то не так делаю?

0 ответов

Другие вопросы по тегам