Marketplace unreal-engine-developer
Expert Unreal Engine 5 developer and technical artist for complete game development via agentic coding. Enables AI-driven control of Unreal Editor through MCP, Python scripting, Blueprints, and C++ for level design, asset management, gameplay programming, and visual development.
git clone https://github.com/aiskillstore/marketplace
T=$(mktemp -d) && git clone --depth=1 https://github.com/aiskillstore/marketplace "$T" && mkdir -p ~/.claude/skills && cp -r "$T/skills/dammianmiller/unreal-engine-developer" ~/.claude/skills/aiskillstore-marketplace-unreal-engine-developer && rm -rf "$T"
skills/dammianmiller/unreal-engine-developer/SKILL.mdUnreal Engine Developer & Technical Artist
Overview
This skill enables complete game development in Unreal Engine 5 through agentic coding. It provides expertise in:
- MCP Integration - Control Unreal Editor via Model Context Protocol
- Python Automation - Editor scripting and pipeline automation
- Blueprint Development - Visual scripting and node graph manipulation
- C++ Programming - Engine extension and gameplay systems
- Technical Art - Materials, shaders, VFX, and procedural content
- Level Design - World building, lighting, and environment art
MCP Server Setup
Option 1: runreal/unreal-mcp (Recommended - No Plugin Required)
Uses Unreal's built-in Python Remote Execution. Supports full Unreal Python API.
Prerequisites:
- Unreal Engine 5.4+
- Node.js with npx
Unreal Editor Setup:
- Edit → Plugins → Enable "Python Editor Script Plugin"
- Edit → Project Settings → Search "Python" → Enable "Remote Execution"
- Restart Editor
MCP Client Config:
{ "mcpServers": { "unreal": { "command": "npx", "args": ["-y", "@runreal/unreal-mcp"] } } }
Available Tools:
| Tool | Description |
|---|---|
| Execute any Python within Unreal Editor |
| List all Unreal assets |
| Export asset to text |
| Get asset info including LOD levels |
| Search assets by name/path/class |
| Get all actors with properties |
| Create new actor in world |
| Update existing actor |
| Delete actor from world |
| Run console command |
| Capture viewport screenshot |
| Position viewport camera |
Option 2: chongdashu/unreal-mcp (Plugin-Based)
Provides deeper Blueprint and node graph control via C++ plugin.
Prerequisites:
- Unreal Engine 5.5+
- Python 3.12+
- uv package manager
Installation:
- Copy
to your project's Plugins folderMCPGameProject/Plugins/UnrealMCP - Generate Visual Studio project files
- Build project with plugin
MCP Client Config:
{ "mcpServers": { "unrealMCP": { "command": "uv", "args": [ "--directory", "<path/to/Python>", "run", "unreal_mcp_server.py" ] } } }
Additional Capabilities:
- Create Blueprint classes with custom components
- Add and configure components (mesh, camera, light)
- Manipulate Blueprint node graphs
- Add event nodes (BeginPlay, Tick)
- Create function call nodes and connect them
- Add variables with types and defaults
Python Scripting Reference
Enable Python in Unreal
- Edit → Plugins → Enable "Python Editor Script Plugin"
- Edit → Plugins → Enable "Editor Scripting Utilities"
- Restart Editor
Unreal embeds Python 3.11.8 - no separate installation needed.
Core API Patterns
import unreal # Asset Registry asset_registry = unreal.AssetRegistryHelpers.get_asset_registry() assets = asset_registry.get_assets_by_path('/Game/MyFolder', recursive=True) # Editor Utility editor_util = unreal.EditorUtilityLibrary() selected_assets = editor_util.get_selected_assets() # Actor Operations world = unreal.EditorLevelLibrary.get_editor_world() actors = unreal.EditorLevelLibrary.get_all_level_actors() # Spawn Actor location = unreal.Vector(0, 0, 100) rotation = unreal.Rotator(0, 0, 0) actor = unreal.EditorLevelLibrary.spawn_actor_from_class( unreal.StaticMeshActor, location, rotation ) # Set Properties actor.set_actor_label('MyActor') actor.set_actor_location(unreal.Vector(100, 200, 300), False, False) actor.set_actor_rotation(unreal.Rotator(0, 45, 0), False) # Static Mesh Component mesh_component = actor.static_mesh_component mesh_component.set_static_mesh( unreal.load_asset('/Game/Meshes/MyMesh') ) # Material Assignment material = unreal.load_asset('/Game/Materials/MyMaterial') mesh_component.set_material(0, material)
Asset Management
# Create Asset factory = unreal.MaterialFactoryNew() asset_tools = unreal.AssetToolsHelpers.get_asset_tools() new_material = asset_tools.create_asset( 'M_NewMaterial', '/Game/Materials', unreal.Material, factory ) # Import Asset import_task = unreal.AssetImportTask() import_task.filename = 'C:/path/to/texture.png' import_task.destination_path = '/Game/Textures' import_task.automated = True import_task.save = True unreal.AssetToolsHelpers.get_asset_tools().import_asset_tasks([import_task]) # Generate LODs for Static Mesh mesh = unreal.load_asset('/Game/Meshes/MyMesh') options = unreal.EditorStaticMeshLibrary.generate_lod(mesh, 3) # Save All unreal.EditorAssetLibrary.save_loaded_assets([new_material])
Level Operations
# Load Level unreal.EditorLevelLibrary.load_level('/Game/Maps/MyLevel') # Save Current Level unreal.EditorLevelLibrary.save_current_level() # Get Level Actors by Class lights = unreal.EditorFilterLibrary.by_class( unreal.EditorLevelLibrary.get_all_level_actors(), unreal.PointLight ) # Duplicate Actors duplicates = unreal.EditorLevelLibrary.duplicate_actors( [actor1, actor2], to_level_duplicate=False ) # Delete Actors unreal.EditorLevelLibrary.destroy_actors([actor])
Blueprint Creation via Python
# Create Blueprint factory = unreal.BlueprintFactory() factory.set_editor_property('parent_class', unreal.Actor) asset_tools = unreal.AssetToolsHelpers.get_asset_tools() blueprint = asset_tools.create_asset( 'BP_MyActor', '/Game/Blueprints', unreal.Blueprint, factory ) # Add Component unreal.BlueprintEditorLibrary.add_component( blueprint, unreal.StaticMeshComponent ) # Compile Blueprint unreal.BlueprintEditorLibrary.compile_blueprint(blueprint) # Spawn Blueprint Actor bp_class = unreal.load_class(None, '/Game/Blueprints/BP_MyActor.BP_MyActor_C') actor = unreal.EditorLevelLibrary.spawn_actor_from_class( bp_class, unreal.Vector(0,0,0), unreal.Rotator(0,0,0) )
Editor Utility Widgets
Create custom Editor tools with Python + Blueprints:
# Execute Python from Editor Utility Widget # Use "Execute Python Command" node in Blueprint # Example: Batch rename selected assets import unreal assets = unreal.EditorUtilityLibrary.get_selected_assets() for asset in assets: old_name = asset.get_name() new_name = 'SM_' + old_name # Add prefix unreal.EditorAssetLibrary.rename_asset( asset.get_path_name(), asset.get_path_name().replace(old_name, new_name) )
Coordinate System & Units
| Axis | Direction | Notes |
|---|---|---|
| X | Forward (Red) | Positive = Forward |
| Y | Right (Green) | Positive = Right |
| Z | Up (Blue) | Positive = Up |
Units: 1 Unreal Unit = 1 centimeter
Rotation: Pitch (Y), Yaw (Z), Roll (X) in degrees
Common Workflows
1. Procedural Level Generation
import unreal import random def spawn_grid(mesh_path, rows, cols, spacing): mesh = unreal.load_asset(mesh_path) for x in range(rows): for y in range(cols): loc = unreal.Vector(x * spacing, y * spacing, 0) actor = unreal.EditorLevelLibrary.spawn_actor_from_class( unreal.StaticMeshActor, loc, unreal.Rotator(0,0,0) ) actor.static_mesh_component.set_static_mesh(mesh) # Random rotation actor.set_actor_rotation( unreal.Rotator(0, random.uniform(0, 360), 0), False )
2. Batch Material Assignment
import unreal def assign_material_to_selection(material_path): material = unreal.load_asset(material_path) actors = unreal.EditorLevelLibrary.get_selected_level_actors() for actor in actors: components = actor.get_components_by_class(unreal.StaticMeshComponent) for comp in components: for i in range(comp.get_num_materials()): comp.set_material(i, material)
3. Export Level Data
import unreal import json def export_level_to_json(output_path): actors = unreal.EditorLevelLibrary.get_all_level_actors() data = [] for actor in actors: actor_data = { 'name': actor.get_actor_label(), 'class': actor.get_class().get_name(), 'location': [ actor.get_actor_location().x, actor.get_actor_location().y, actor.get_actor_location().z ], 'rotation': [ actor.get_actor_rotation().pitch, actor.get_actor_rotation().yaw, actor.get_actor_rotation().roll ] } data.append(actor_data) with open(output_path, 'w') as f: json.dump(data, f, indent=2)
Verification Checklist
Before completing any task:
- Python scripts execute without errors in Unreal Console
- Assets are saved after creation/modification
- Blueprint compiles successfully if modified
- Level saves after actor changes
- MCP connection verified if using remote execution
- Screenshots captured for visual verification when relevant
Troubleshooting
MCP Connection Issues
- Verify Python Editor Script Plugin is enabled
- Verify Remote Execution is enabled in Project Settings
- Try bind address
instead of0.0.0.0127.0.0.1 - Restart Unreal Editor completely
- Kill any zombie Node.js processes
Python Script Errors
- Check Output Log for Python exceptions
- Verify asset paths use
prefix/Game/ - Ensure assets are loaded before access
- Use
orunreal.load_asset()
as neededunreal.load_class()
Blueprint Compilation Failures
- Check Message Log for BP errors
- Verify parent class compatibility
- Ensure all required pins are connected
- Save and recompile after node changes