diff --git a/libraries/physics/src/PhysicalEntitySimulation.cpp b/libraries/physics/src/PhysicalEntitySimulation.cpp index bc3c5eda44..cf88af4942 100644 --- a/libraries/physics/src/PhysicalEntitySimulation.cpp +++ b/libraries/physics/src/PhysicalEntitySimulation.cpp @@ -67,6 +67,12 @@ void PhysicalEntitySimulation::removeEntityInternal(EntityItem* entity) { if (motionState) { motionState->clearEntity(); entity->setPhysicsInfo(nullptr); + + // NOTE: we must remove entity from _pendingAdds immediately because we've disconnected the backpointers between + // motionState and entity and they can't be used to look up each other. However we don't need to remove + // motionState from _pendingChanges at this time becuase it will be removed during getObjectsToDelete(). + _pendingAdds.remove(entity); + _pendingRemoves.insert(motionState); _outgoingChanges.remove(motionState); }