agentleFS
edhahnedhahn/agent-skills/ue5-gamedev/SKILL.md

ue5-gamedev

Skill2 starsChanged 8 months agoMITView on GitHub

Unreal Engine 5 game development: C++ coding, Blueprint creation, editor automation, and build management. Use when tasks involve writing UE5 C++ gameplay code, creating or modifying Blueprints, executing editor commands, triggering builds, or working with the UE5 project via Remote Control API, Python bridge, or MCP tools. Covers coding standards, UPROPERTY/UFUNCTION macros, gameplay framework classes, and remote editor interaction.

  • Installs packages

The file

Show its rules and text

We split this skill into the rules it gives an agent

15 rules. About 0 are common, 6 are distinctive, and 9 are very specific to this project.

  • ≈0

    Common · estimate

    Many files like this have a rule of this kind.

  • ≈6

    Distinctive · estimate

    This author's own choices. Worth a look.

  • 9

    Very specific

    Tied to their project's names, files or tools. Probably skip.

  • Common
  • Distinctive
  • Very specific
  1. Distinctive:

    Follow Epic's conventions strictly:

    line 30
  2. Very specific:

    No raw new/delete -- use NewObject<T>(), CreateDefaultSubobject<T>(), or smart pointers

    line 90
  3. Very specific:

    Use FString, FName, FText -- never std::string

    line 91
  4. Distinctive:

    Keep functions under 50 lines

    line 92
  5. Very specific:

    Use const correctness everywhere

    line 93
  6. Very specific:

    Document all public interfaces with / */ comments

    line 94
  7. Very specific:

    Use #pragma once (not include guards)

    line 95
  8. Very specific:

    If you run a bridge or orchestrator service that proxies commands to the UE5 editor host, configure it with UE5_BRIDGE_HOST.

    line 232
  9. Distinctive:

    Capabilities: Create/delete actors, set transforms, query properties, create Blueprint classes, add components, configure input mappings

    line 284
  10. Distinctive:

    When creating or modifying Blueprints:

    line 305
  11. Very specific:

    Keep logic in C++, expose to Blueprints: Use BlueprintCallable for functions, BlueprintReadWrite/BlueprintReadOnly for properties

    line 307
  12. Distinctive:

    Use Gameplay Tags: instead of enums for extensible categorization

    line 312
  13. Very specific:

    Can't connect to UE5 host: Check network connectivity, verify UE5 is running, test curl http://localhost:8080/status

    line 326
  14. Distinctive:

    Remote Control not responding: Ensure Remote Control API + Web Remote Control plugins are enabled in the project

    line 327
  15. Very specific:

    Build failures: Check build logs on the UE5 host.

    line 329

≈ “Common” is an estimate: at least 1 in 5 of the 350,495 skill files we read have a rule of the same kind, not the same words. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.

Keep what fits and drop the rest. Your version, ready for your agents.
Files
SKILL.md

UE5 Game Development

C++ coding, Blueprint authoring, editor automation, and build management for Unreal Engine 5 projects.

Infrastructure

UE5 requires a machine with a capable GPU and sufficient RAM. Remote access to the editor is provided through multiple channels. Configure the following environment variables (or use the defaults shown):

ServiceEnv VarDefaultPurpose
Remote Control APIUE5_REMOTE_CONTROL_HOSTlocalhost:8080Property access, function calls, editor control
UE5 Editor (Remote Exec)UE5_PYTHON_BRIDGE_HOSTlocalhost:30010Python script execution inside editor
Bridge / Orchestrator (optional)UE5_BRIDGE_HOSTlocalhost:8000Proxied UE5 commands from an orchestrator service

Project path: Set UE5_PROJECT_PATH to your .uproject directory (e.g., D:\UnrealProjects\MyGame).

C++ coding standards

Follow Epic's conventions strictly:

Naming prefixes

  • F -- Structs (FVector, FHitResult, FMyStruct)
  • U -- UObject-derived classes (UActorComponent, UMyComponent)
  • A -- Actor-derived classes (ACharacter, AMyActor)
  • E -- Enums (ECollisionChannel, EMyEnum)
  • I -- Interfaces (IInteractable)
  • T -- Templates (TArray, TMap, TSubclassOf)
  • b -- Boolean variables (bIsAlive, bCanJump)

UPROPERTY specifiers

// Editable in editor, visible in Blueprints
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Combat")
float MaxHealth = 100.f;

// Set in Blueprint, read-only in editor
UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category = "Status")
bool bIsAlive = true;

// Replicated property
UPROPERTY(ReplicatedUsing = OnRep_Health)
float Health;

// Not exposed, internal only
UPROPERTY()
float InternalTimer;

UFUNCTION specifiers

// Callable from Blueprints
UFUNCTION(BlueprintCallable, Category = "Combat")
void TakeDamage(float Amount);

// Implementable in Blueprints (no C++ body)
UFUNCTION(BlueprintImplementableEvent, Category = "Events")
void OnDeath();

// C++ default with Blueprint override option
UFUNCTION(BlueprintNativeEvent, Category = "Events")
void OnHit(const FHitResult& Hit);

// Server RPC
UFUNCTION(Server, Reliable, WithValidation)
void ServerFireWeapon();

Container types

  • TArray<T> -- Dynamic array (not std::vector)
  • TMap<K, V> -- Hash map (not std::map)
  • TSet<T> -- Hash set
  • TSubclassOf<T> -- Type-safe class reference
  • TSoftObjectPtr<T> -- Lazy-loaded asset reference
  • TWeakObjectPtr<T> -- Non-owning reference

Rules

  • No raw new/delete -- use NewObject<T>(), CreateDefaultSubobject<T>(), or smart pointers
  • Use FString, FName, FText -- never std::string
  • Keep functions under 50 lines
  • Use const correctness everywhere
  • Document all public interfaces with /** */ comments
  • Use #pragma once (not include guards)
  • Include "CoreMinimal.h" first, then project headers

Gameplay framework classes

ClassPurposeWhen to use
AGameModeBaseGame rules, spawningMatch/session logic
AGameStateBaseShared game stateScore, match status
APlayerControllerPlayer input routingCamera, input, HUD
APlayerStatePer-player statePlayer score, team
APawn / ACharacterControllable entitiesPlayers, NPCs
UActorComponentLogic componentsReusable behaviors
USceneComponentSpatial componentsTransform hierarchy
UGameInstanceSubsystemPersistent systemsSave data, settings
UWorldSubsystemPer-world systemsLevel-scoped logic

Remote Control API

The Remote Control API plugin exposes UE5 editor functionality over HTTP.

Read a property

PUT http://localhost:8080/remote/object/property
{
  "objectPath": "/Game/Maps/MainLevel.MainLevel:PersistentLevel.BP_Player_C_0",
  "propertyName": "MaxHealth"
}

Set a property

PUT http://localhost:8080/remote/object/property
{
  "objectPath": "/Game/Maps/MainLevel.MainLevel:PersistentLevel.BP_Player_C_0",
  "propertyName": "MaxHealth",
  "propertyValue": { "MaxHealth": 200.0 }
}

Call a function

PUT http://localhost:8080/remote/object/call
{
  "objectPath": "/Game/Maps/MainLevel.MainLevel:PersistentLevel.BP_Player_C_0",
  "functionName": "TakeDamage",
  "parameters": { "Amount": 50.0 }
}

Search for objects

PUT http://localhost:8080/remote/search/object
{
  "query": "BP_Player",
  "class": "/Script/Engine.Actor",
  "outerPath": "/Game/Maps/MainLevel"
}

Execute console command

PUT http://localhost:8080/remote/object/call
{
  "objectPath": "/Script/Engine.Default__KismetSystemLibrary",
  "functionName": "ExecuteConsoleCommand",
  "parameters": {
    "WorldContextObject": "/Game/Maps/MainLevel.MainLevel",
    "Command": "stat fps"
  }
}

Python bridge

UE5's Python Editor Script Plugin exposes the unreal module inside the editor. Execute Python remotely via port 30010.

Common operations

import unreal

# Get the editor subsystem
editor = unreal.EditorLevelLibrary()

# Spawn an actor
location = unreal.Vector(0, 0, 100)
rotation = unreal.Rotator(0, 0, 0)
actor = editor.spawn_actor_from_class(unreal.StaticMeshActor, location, rotation)

# Set a mesh
mesh_component = actor.get_component_by_class(unreal.StaticMeshComponent)
mesh = unreal.EditorAssetLibrary.load_asset("/Engine/BasicShapes/Cube")
mesh_component.set_static_mesh(mesh)

# Find actors
actors = unreal.EditorLevelLibrary.get_all_level_actors()
player_starts = unreal.GameplayStatics.get_all_actors_of_class(
    unreal.EditorLevelLibrary.get_editor_world(),
    unreal.PlayerStart
)

# Asset operations
unreal.EditorAssetLibrary.rename_asset("/Game/Old/Path", "/Game/New/Path")
unreal.EditorAssetLibrary.duplicate_asset("/Game/Source", "/Game/Copy")
unreal.EditorAssetLibrary.delete_asset("/Game/Unused/Asset")

# Blueprint operations
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", None, factory)

Remote execution from external script

# Uses UE5's remote_execution.py (bundled with Python Editor Script Plugin)
# Or use the upyrc package: pip install upyrc
import remote_execution

remote = remote_execution.RemoteExecution()
remote.start()
# Wait for node discovery
nodes = remote.remote_nodes
# Execute on first found editor
remote.run_command("print('Hello from external!')", exec_node=nodes[0])
remote.stop()

UE5 Bridge API (optional orchestrator / proxy)

If you run a bridge or orchestrator service that proxies commands to the UE5 editor host, configure it with UE5_BRIDGE_HOST. This is useful when the machine running Claude Code is not the same machine running UE5, or when you want centralized command routing.

Example endpoints (adjust host/port to your setup):

# Check UE5 connectivity
GET http://localhost:8000/ue5/status

# Trigger a build
POST http://localhost:8000/ue5/build
{
  "project_path": "D:\\UnrealProjects\\MyGame",
  "config": "Development",
  "platform": "Win64",
  "cook_content": true
}

# Check build status
GET http://localhost:8000/ue5/build/{job_id}

# Execute editor command
POST http://localhost:8000/ue5/editor/command
{ "command": "open_level", "args": {"level": "/Game/Maps/MainLevel"} }

# List assets
GET http://localhost:8000/ue5/assets?path=/Game&asset_type=Blueprint

# Import asset
POST http://localhost:8000/ue5/import
{
  "source_path": "\\\\server\\exports\\character.fbx",
  "destination_path": "/Game/Characters/Imported"
}

Open-source MCP servers

These MCP servers provide additional UE5 integration capabilities:

ChiR24/Unreal_mcp (recommended)

Native C++ automation bridge.

  • Install: npm install -g unreal-engine-mcp-server
  • Capabilities: Actor creation/manipulation, asset management, Blueprint operations, lighting control, animation sequencing, audio management, console commands
  • Architecture: TypeScript server + C++ UE integration
  • Repo: https://github.com/ChiR24/Unreal_mcp

chongdashu/unreal-mcp

Remote Control API based. Includes a pre-configured UE5.5 starter project.

appleweed/UnrealMCPBridge

Direct Python API access via MCP. Available on Fab Store.

ayeletstudioindia/unreal-analyzer-mcp

Source code analysis and understanding (read-only).

Blueprint best practices

When creating or modifying Blueprints:

  • Keep logic in C++, expose to Blueprints: Use BlueprintCallable for functions, BlueprintReadWrite/BlueprintReadOnly for properties
  • Use BlueprintNativeEvent for functions that designers should be able to override
  • Use BlueprintImplementableEvent for pure designer hooks (no C++ implementation)
  • Prefer components over inheritance: Attach behavior via UActorComponent subclasses
  • Use Data Assets for configuration data (not hardcoded values in Blueprints)
  • Use Gameplay Tags instead of enums for extensible categorization
  • Use Gameplay Abilities (GAS) for complex ability systems
  • Blueprint interfaces for cross-Blueprint communication (not casting)

Build workflow

  1. Check UE5 status: GET /ue5/status -- ensure editor is running
  2. Save all: Execute editor command to save before building
  3. Trigger build: POST /ue5/build with desired config
  4. Monitor: Poll GET /ue5/build/{job_id} for status
  5. Configs: Development (debug), DebugGame (optimized+debug), Shipping (release)

Troubleshooting

  • Can't connect to UE5 host: Check network connectivity, verify UE5 is running, test curl http://localhost:8080/status
  • Remote Control not responding: Ensure Remote Control API + Web Remote Control plugins are enabled in the project
  • Python bridge timeout: Editor may be busy (compiling shaders, loading level). Retry after delay.
  • Build failures: Check build logs on the UE5 host. Common issues: missing includes, GENERATED_BODY() macro, circular dependencies.

Download now (ZIP)

Does it work?

Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.

No reviews yet

People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.

  • It worked
  • Partly
  • It didn't
What did you use it for? e.g. Reviewing pull requests in a Rails app

Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.

Your trail

Files you open will collect here, so you can find them again.

Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.

Now do this for your own.

Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.