public void Dispose() { this.StandardCleanup(); if (_solverPool != null) { _solverPool.Dispose(); _solverPool = null; } if (_parallelSolver != null) { _parallelSolver.Dispose(); _parallelSolver = null; } }
//Dispose of components and clean up public override void Dispose() { if (_disposing) { return; } //Unregister all registered rigidbodies foreach (var rb in _bulletRigidBodies) { _dynamicsWorld.RemoveRigidBody(rb); } //Find all constraints and tell them to dispose var constraints = (BulletConstraint[])Object.FindObjectsOfType(typeof(BulletConstraint)); if (constraints.Length == 0) { return; } foreach (var tc in constraints) { tc.Dispose(); } //Find all Bullet rigidbody instances and tell them to dispose var rigidBodies = (BulletRigidBody[])Object.FindObjectsOfType(typeof(BulletRigidBody)); if (rigidBodies.Length == 0) { return; } foreach (var rb in rigidBodies) { rb.Dispose(); } //Dispose of the physics world components in reverse order _disposing = true; _dynamicsWorld.Dispose(); _constraintSolver?.Dispose(); _broadphaseInterface.Dispose(); _collisionDispatcher.Dispose(); _collisionConfig.Dispose(); _bulletBehaviors.Clear(); _threadedSolver?.Dispose(); }