Надо, даже обязательно надо, четко отслеживать момент, что бы не рождалось наземки больше, чем уничтожалось.
Например, это делается так - миссия-хост загружает (назовем все миссии, отличные от стартовой - слейвами) слейв только один раз. И слейв сам себя контролирует. В случае с колоннами чуть сложнее, в случае с танкерами - слейв самостоятельно отслеживает состояние своего танкера (найти его не проблема, по-умолчанию миссия вызывает методы только для своих объектов), и, по условию, перед тем как загрузить сама себя, принудительно танкер уничтожает. Точно также и танки - перед загрузкой самой себя слейв прибивает все свои объекты. Тогда не будет лишних обломков и битва не будет зарастать мусором.
Недостаток такого подхода очевиден, слейв ничего не знает о событиях в масштабе битвы. За исключением, конечно, прямого приказа слушать все события. Но все равно он ничего не знает о пользовательских данных хоста (счет и т.д). Это можно обойти чуть более сложным методом:
1. Именовать объекты в миссии таким способом, что бы хост точно знал, к какой миссии какой объект относится. Перед загрузкой нового слейва убиваем все объекты старые прямо из хоста. Имена объектов можно менять прямо в файле (имена подчиняются определенным правилам правда).
2. Любой актор в полном имени содержит в начале номер миссии к которой принадлежит. Загружаем слейв, реагируем на OnMissionLoaded - в параметре передается номер свежей миссии. Все, мы можем выборочно убивать объекты по номеру. Далее загрузили следующую, и т.д.
3. Если не ошибаюсь, можно получить доступ к номеру, который будет присвоен следующей загруженной миссии. Тогда перез загрузкой новой миссии просто запоминаем этот номер. Далее как во втором пункте.
Идея всего вышеописанного - обязательно убирать за собой перед повторной загрузкой. Тогда и танкеры не будут упираться в своих предшественников.