Babysitter unreal-development
Unreal Engine integration skill for C++/Blueprint development, actor lifecycle management, plugin development, and editor automation. Enables LLMs to interact with Unreal Editor through MCP servers for level manipulation, Blueprint generation, and automated workflows.
install
source · Clone the upstream repo
git clone https://github.com/a5c-ai/babysitter
Claude Code · Install into ~/.claude/skills/
T=$(mktemp -d) && git clone --depth=1 https://github.com/a5c-ai/babysitter "$T" && mkdir -p ~/.claude/skills && cp -r "$T/library/specializations/game-development/skills/unreal-development" ~/.claude/skills/a5c-ai-babysitter-unreal-development && rm -rf "$T"
manifest:
library/specializations/game-development/skills/unreal-development/SKILL.mdsource content
Unreal Development Skill
Comprehensive Unreal Engine development integration for AI-assisted game creation, editor automation, and project management.
Overview
This skill provides capabilities for interacting with Unreal Engine projects, including C++ development, Blueprint visual scripting, actor management, and build automation. It leverages the Unreal MCP ecosystem for direct editor integration when available.
Capabilities
Project Management
- Create and configure Unreal projects
- Manage project settings (Project Settings, DefaultEngine.ini, etc.)
- Configure plugin dependencies
- Set up module structure for code organization
C++ Development
- Generate Actor and Component classes with proper UCLASS macros
- Create UObject subclasses with reflection support
- Implement interfaces (UInterface)
- Write custom Editor modules
- Generate unit tests using Automation Framework
Blueprint Visual Scripting
- Generate Blueprint classes from specifications
- Create Blueprint function libraries
- Design Blueprint interfaces
- Build reusable Blueprint macros
- Generate data-only Blueprints
Actor and Component System
- Create and modify Actors programmatically
- Design component hierarchies
- Implement tick and lifecycle management
- Set up actor replication for multiplayer
Level Design
- Create and modify levels
- Place actors and configure properties
- Set up level streaming
- Configure World Partition settings
Build System
- Configure build settings for multiple platforms
- Create build scripts using BuildGraph
- Set up CI/CD pipelines
- Manage platform-specific configurations
Prerequisites
Unreal Engine Installation
- Unreal Engine 5.0 or higher recommended
- Visual Studio 2022 with C++ game development workload
- .NET 6.0 SDK for tooling
MCP Server (Recommended)
For direct Unreal Editor integration:
{ "mcpServers": { "unreal": { "command": "python", "args": ["-m", "unreal_mcp"], "env": { "UNREAL_PROJECT_PATH": "/path/to/project.uproject" } } } }
Alternative MCP servers:
(kvick-games) - TCP server with JSON commandsUnrealMCP
(chongdashu) - Natural language controlunreal-mcp
(ChiR24) - C++ Automation BridgeUnreal_mcp
Usage Patterns
Creating an Actor Class (C++)
// MyCharacter.h #pragma once #include "CoreMinimal.h" #include "GameFramework/Character.h" #include "MyCharacter.generated.h" UCLASS() class MYGAME_API AMyCharacter : public ACharacter { GENERATED_BODY() public: AMyCharacter(); protected: virtual void BeginPlay() override; virtual void Tick(float DeltaTime) override; virtual void SetupPlayerInputComponent(class UInputComponent* PlayerInputComponent) override; UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Movement") float MoveSpeed = 600.0f; UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Movement") float JumpHeight = 420.0f; UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category = "Components") class UCameraComponent* CameraComponent; UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category = "Components") class USpringArmComponent* SpringArmComponent; private: void MoveForward(float Value); void MoveRight(float Value); void StartJump(); void StopJump(); };
// MyCharacter.cpp #include "MyCharacter.h" #include "Camera/CameraComponent.h" #include "GameFramework/SpringArmComponent.h" #include "GameFramework/CharacterMovementComponent.h" AMyCharacter::AMyCharacter() { PrimaryActorTick.bCanEverTick = true; // Create spring arm SpringArmComponent = CreateDefaultSubobject<USpringArmComponent>(TEXT("SpringArm")); SpringArmComponent->SetupAttachment(RootComponent); SpringArmComponent->TargetArmLength = 400.0f; SpringArmComponent->bUsePawnControlRotation = true; // Create camera CameraComponent = CreateDefaultSubobject<UCameraComponent>(TEXT("Camera")); CameraComponent->SetupAttachment(SpringArmComponent); // Configure movement GetCharacterMovement()->MaxWalkSpeed = MoveSpeed; GetCharacterMovement()->JumpZVelocity = JumpHeight; } void AMyCharacter::BeginPlay() { Super::BeginPlay(); } void AMyCharacter::Tick(float DeltaTime) { Super::Tick(DeltaTime); } void AMyCharacter::SetupPlayerInputComponent(UInputComponent* PlayerInputComponent) { Super::SetupPlayerInputComponent(PlayerInputComponent); PlayerInputComponent->BindAxis("MoveForward", this, &AMyCharacter::MoveForward); PlayerInputComponent->BindAxis("MoveRight", this, &AMyCharacter::MoveRight); PlayerInputComponent->BindAction("Jump", IE_Pressed, this, &AMyCharacter::StartJump); PlayerInputComponent->BindAction("Jump", IE_Released, this, &AMyCharacter::StopJump); } void AMyCharacter::MoveForward(float Value) { if (Value != 0.0f) { const FRotator Rotation = Controller->GetControlRotation(); const FRotator YawRotation(0, Rotation.Yaw, 0); const FVector Direction = FRotationMatrix(YawRotation).GetUnitAxis(EAxis::X); AddMovementInput(Direction, Value); } } void AMyCharacter::MoveRight(float Value) { if (Value != 0.0f) { const FRotator Rotation = Controller->GetControlRotation(); const FRotator YawRotation(0, Rotation.Yaw, 0); const FVector Direction = FRotationMatrix(YawRotation).GetUnitAxis(EAxis::Y); AddMovementInput(Direction, Value); } } void AMyCharacter::StartJump() { Jump(); } void AMyCharacter::StopJump() { StopJumping(); }
Creating a Data Asset (C++)
// EnemyDataAsset.h #pragma once #include "CoreMinimal.h" #include "Engine/DataAsset.h" #include "EnemyDataAsset.generated.h" UENUM(BlueprintType) enum class EEnemyType : uint8 { Melee, Ranged, Boss }; UCLASS(BlueprintType) class MYGAME_API UEnemyDataAsset : public UPrimaryDataAsset { GENERATED_BODY() public: UPROPERTY(EditDefaultsOnly, BlueprintReadOnly, Category = "Basic Info") FString EnemyName; UPROPERTY(EditDefaultsOnly, BlueprintReadOnly, Category = "Basic Info") EEnemyType EnemyType; UPROPERTY(EditDefaultsOnly, BlueprintReadOnly, Category = "Stats") float MaxHealth = 100.0f; UPROPERTY(EditDefaultsOnly, BlueprintReadOnly, Category = "Stats") float MoveSpeed = 300.0f; UPROPERTY(EditDefaultsOnly, BlueprintReadOnly, Category = "Combat") float AttackDamage = 10.0f; UPROPERTY(EditDefaultsOnly, BlueprintReadOnly, Category = "Combat") float AttackRange = 150.0f; UPROPERTY(EditDefaultsOnly, BlueprintReadOnly, Category = "Visuals") TObjectPtr<USkeletalMesh> Mesh; UPROPERTY(EditDefaultsOnly, BlueprintReadOnly, Category = "Visuals") TObjectPtr<UAnimBlueprint> AnimBlueprint; // UPrimaryDataAsset interface virtual FPrimaryAssetId GetPrimaryAssetId() const override; };
Gameplay Ability System Example
// MyGameplayAbility.h #pragma once #include "CoreMinimal.h" #include "Abilities/GameplayAbility.h" #include "MyGameplayAbility.generated.h" UCLASS() class MYGAME_API UMyGameplayAbility : public UGameplayAbility { GENERATED_BODY() public: UMyGameplayAbility(); UPROPERTY(EditDefaultsOnly, BlueprintReadOnly, Category = "Ability") float CooldownDuration = 1.0f; UPROPERTY(EditDefaultsOnly, BlueprintReadOnly, Category = "Ability") float ManaCost = 10.0f; protected: virtual void ActivateAbility( const FGameplayAbilitySpecHandle Handle, const FGameplayAbilityActorInfo* ActorInfo, const FGameplayAbilityActivationInfo ActivationInfo, const FGameplayEventData* TriggerEventData) override; virtual void EndAbility( const FGameplayAbilitySpecHandle Handle, const FGameplayAbilityActorInfo* ActorInfo, const FGameplayAbilityActivationInfo ActivationInfo, bool bReplicateEndAbility, bool bWasCancelled) override; };
Integration with Babysitter SDK
Task Definition Example
const unrealActorTask = defineTask({ name: 'unreal-actor-generation', description: 'Generate Unreal Engine Actor class', inputs: { actorType: { type: 'string', required: true }, // Character, Pawn, Actor className: { type: 'string', required: true }, components: { type: 'array', required: true }, outputPath: { type: 'string', required: true } }, outputs: { headerPath: { type: 'string' }, sourcePath: { type: 'string' }, success: { type: 'boolean' } }, async run(inputs, taskCtx) { return { kind: 'skill', title: `Generate Unreal Actor: ${inputs.className}`, skill: { name: 'unreal-development', context: { operation: 'generate_actor', actorType: inputs.actorType, className: inputs.className, components: inputs.components, outputPath: inputs.outputPath } }, io: { inputJsonPath: `tasks/${taskCtx.effectId}/input.json`, outputJsonPath: `tasks/${taskCtx.effectId}/result.json` } }; } });
MCP Server Integration
Available MCP Tools (via unreal-mcp)
| Tool | Description |
|---|---|
| Spawn actor in level |
| Modify actor properties |
| Generate Blueprint class |
| Trigger hot reload/compile |
| Build for target platform |
| Execute automation tests |
| Get level structure |
| Execute Unreal Python command |
Configuration
{ "mcpServers": { "unreal": { "command": "python", "args": ["-m", "unreal_mcp"], "env": { "UNREAL_PROJECT_PATH": "C:/Projects/MyGame/MyGame.uproject", "UNREAL_ENGINE_PATH": "C:/Program Files/Epic Games/UE_5.3" } } } }
Best Practices
- UCLASS Macros: Always use appropriate specifiers (BlueprintType, Blueprintable, etc.)
- Property Specifiers: Use EditAnywhere/VisibleAnywhere and BlueprintReadWrite/BlueprintReadOnly correctly
- Replication: Mark replicated properties with UPROPERTY(Replicated)
- Memory Management: Use TObjectPtr for object pointers, avoid raw pointers
- Modules: Organize code into logical modules with clear dependencies
- Tick Optimization: Only enable tick when necessary, use Timers for periodic tasks
Platform Considerations
| Platform | Key Considerations |
|---|---|
| PC | Full feature support, shader model 5+ |
| Console | Memory budgets, certification requirements |
| Mobile | Simplified rendering, thermal management |
| VR | Frame rate requirements, motion sickness prevention |