/**
 * Removes a LevelStreaming from the world. Returns true if the LevelStreaming was removed successfully.
 *
 * @param	InLevelStreaming	The LevelStreaming to remove.
 * @return						true if the LevelStreaming was removed successfully, false otherwise.
 */
bool PrivateRemoveInvalidLevelFromWorld(ULevelStreaming* InLevelStreaming)
{
    bool bRemovedLevelStreaming = false;
    if (InLevelStreaming != NULL)
    {
        check(InLevelStreaming->GetLoadedLevel() == NULL); // This method is designed to be used to remove left over references to null levels

        InLevelStreaming->Modify();

        // Disassociate the level from the volume.
        for ( auto VolIter = InLevelStreaming->EditorStreamingVolumes.CreateIterator(); VolIter; VolIter++ )
        {
            ALevelStreamingVolume* LevelStreamingVolume = *VolIter;
            if ( LevelStreamingVolume )
            {
                LevelStreamingVolume->Modify();
                LevelStreamingVolume->StreamingLevels.Remove( InLevelStreaming );
            }
        }

        // Disassociate the volumes from the level.
        InLevelStreaming->EditorStreamingVolumes.Empty();

        UWorld* OwningWorld = Cast<UWorld>(InLevelStreaming->GetOuter());
        if (OwningWorld != NULL)
        {
            OwningWorld->StreamingLevels.Remove(InLevelStreaming);
            OwningWorld->RefreshStreamingLevels();
            bRemovedLevelStreaming = true;
        }
    }
    return bRemovedLevelStreaming;
}