Unreal Engine 5 level design: world building, landscape, lighting, environment art, gameplay spaces, and level streaming. Use when tasks involve creating or modifying levels, placing actors, configuring lighting, building landscapes, setting up level streaming, or designing gameplay spaces. Covers both manual editor workflows and automated placement via Remote Control API, Python bridge, and MCP tools.
World building, environment art, lighting, landscape, gameplay spaces, and level streaming in Unreal Engine 5.
See the ue5-gamedev skill for full infrastructure details.
| Channel | Endpoint | Use for level design |
|---|---|---|
| Remote Control API | localhost:8080 | Actor placement, property tweaking, lighting adjustments |
| Python bridge | localhost:30010 | Batch operations, procedural placement, asset management |
| MCP (ChiR24/Unreal_mcp) | Local plugin | Actor creation, level management, lighting control |
/Game/Maps/
MainLevel.umap -- Persistent level
MainLevel_Gameplay.umap -- Gameplay actors (streaming)
MainLevel_Lighting.umap -- Lights and post-process (streaming)
MainLevel_Audio.umap -- Ambient audio (streaming)
MainLevel_Foliage.umap -- Foliage and vegetation (streaming)
For open worlds, use World Partition instead of manual level streaming:
For linear or contained levels:
ULevelStreamingDynamic for code-driven streaming# Spawn an actor at a location
PUT http://localhost:8080/remote/object/call
{
"objectPath": "/Script/Engine.Default__GameplayStatics",
"functionName": "BeginDeferredActorSpawnFromClass",
"parameters": {
"WorldContextObject": "/Game/Maps/MainLevel.MainLevel",
"ActorClass": "/Game/Blueprints/BP_Torch.BP_Torch_C",
"SpawnTransform": {
"Translation": { "X": 1000, "Y": 500, "Z": 0 },
"Rotation": { "X": 0, "Y": 0, "Z": 45, "W": 1 },
"Scale3D": { "X": 1, "Y": 1, "Z": 1 }
}
}
}
import unreal
editor = unreal.EditorLevelLibrary()
# Spawn from Blueprint class
bp_class = unreal.EditorAssetLibrary.load_blueprint_class("/Game/Blueprints/BP_Torch")
location = unreal.Vector(1000, 500, 0)
rotation = unreal.Rotator(0, 45, 0)
actor = editor.spawn_actor_from_class(bp_class, location, rotation)
# Batch place actors along a path
import math
for i in range(20):
angle = (i / 20) * 2 * math.pi
x = math.cos(angle) * 2000
y = math.sin(angle) * 2000
loc = unreal.Vector(x, y, 0)
editor.spawn_actor_from_class(bp_class, loc, unreal.Rotator(0, 0, 0))
The MCP server provides higher-level actor management:
import unreal
# Create landscape material layers via Python
landscape = unreal.EditorLevelLibrary.get_all_level_actors_of_class(unreal.Landscape)[0]
# Sculpt operations use the Landscape Editor mode
# For automation, modify heightmap data directly:
# Export: Right-click landscape > Export to file (.r16 or .png)
# Import: Landscape > Import heightmap
| Light | Use case | Cost |
|---|---|---|
| Directional Light | Sun/moon, outdoor scenes | Low (one per level) |
| Sky Light | Ambient fill, sky color | Low (one per level) |
| Point Light | Lamps, torches, small areas | Medium |
| Spot Light | Flashlights, focused beams | Medium |
| Rect Light | Windows, screens, area sources | High |
# Adjust directional light intensity
PUT http://localhost:8080/remote/object/property
{
"objectPath": "/Game/Maps/MainLevel.MainLevel:PersistentLevel.DirectionalLight_0.LightComponent0",
"propertyName": "Intensity",
"propertyValue": { "Intensity": 8.0 }
}
# Change light color
PUT http://localhost:8080/remote/object/property
{
"objectPath": "/Game/Maps/MainLevel.MainLevel:PersistentLevel.PointLight_0.LightComponent0",
"propertyName": "LightColor",
"propertyValue": { "LightColor": { "R": 255, "G": 180, "B": 100, "A": 255 } }
}
import unreal
editor = unreal.EditorLevelLibrary()
# Spawn a point light
light = editor.spawn_actor_from_class(
unreal.PointLight,
unreal.Vector(500, 0, 300),
unreal.Rotator(0, 0, 0)
)
light_comp = light.get_component_by_class(unreal.PointLightComponent)
light_comp.set_intensity(5000)
light_comp.set_light_color(unreal.LinearColor(1.0, 0.7, 0.4, 1.0))
light_comp.set_attenuation_radius(1000)
Key properties to control via Remote Control or Python:
stat unit, stat gpu, stat scenerendering console commands. ProfileGPU (Ctrl+Shift+,) for per-pass timings./Game/
Maps/ -- Level files
Blueprints/ -- Blueprint actors
Environment/
Meshes/ -- Static meshes
Materials/ -- Material instances
Textures/ -- Texture assets
Lighting/
LightProfiles/ -- IES profiles
HDRIs/ -- Sky/environment maps
FX/ -- Niagara particle systems
Audio/
Ambient/ -- Environmental audio
SFX/ -- Sound effects