Scripting with Python
As you mentioned, Smart Unwrap in object mode takes all the objects as a whole. It's more useful to create a texture atlas, rather than individual UV maps.
Like in most scenarios where a tedius task must be done several times, you can try to automate the process with python code.
You can write a script that iterates through all the selected object of the scene, enter edit mode for each object, select all the elements of the object an call the smart_project()
operator.
Blender 2.8+
import bpy
# Get all objects in selection
selection = bpy.context.selected_objects
# Get the active object
active_object = bpy.context.active_object
# Deselect all objects
bpy.ops.object.select_all(action='DESELECT')
for obj in selection:
# Select each object
obj.select_set(True)
# Make it active
bpy.context.view_layer.objects.active = obj
# Toggle into Edit Mode
bpy.ops.object.mode_set(mode='EDIT')
# Select the geometry
bpy.ops.mesh.select_all(action='SELECT')
# Call the smart project operator
bpy.ops.uv.smart_project()
# Toggle out of Edit Mode
bpy.ops.object.mode_set(mode='OBJECT')
# Deselect the object
obj.select_set(False)
# Restore the selection
for obj in selection:
obj.select_set(True)
# Restore the active object
bpy.context.view_layer.objects.active = active_object
Blender 2.7x
import bpy
if bpy.context.selected_objects != []:
for obj in bpy.context.selected_objects: #loop through all the selected objects
if obj.type == 'MESH':
bpy.context.scene.objects.active = obj
bpy.ops.object.editmode_toggle() #entering edit mode
bpy.ops.mesh.select_all(action='SELECT') #select all objects elements
bpy.ops.uv.smart_project() #the actual unwrapping operation
bpy.ops.object.editmode_toggle() #exiting edit mode