Escrevendo um kit (guia interno do UEAMCP)
Leia este guia por completo antes de adicionar ferramentas. Tudo aqui é cobrado na revisão de código.
Estrutura
Source/UeaKit<Name>/
UeaKit<Name>.Build.cs # regras do módulo (C++17, somente editor)
Private/UeaKit<Name>Module.cpp # IModuleInterface vazio + IMPLEMENT_MODULE
Public/UeaKit_<Name>_Types.h # USTRUCT de args/replies
Public/UeaKit_<Name>.h # UCLASS UUeaKit_<Name> : UUeaKit com as ferramentas
Private/UeaKit_<Name>.cpp # implementação
Docs/guides/<kit>.md # guia de uso voltado ao agente (servido como uea://guide/<kit>)
Nome do módulo: UeaKit<Name> (ex.: UeaKitBlueprint). Classe: UUeaKit_<Name>. Nome do kit
(namespace curto): override de KitName(), ex.: "bp".
Formato de uma ferramenta
/** One-line description shown to the agent. Mention units, defaults and what it returns. */
UFUNCTION(meta = (UeaTool = "bp.add_variable", Mutates))
static void AddVariable(const FUeaBpAddVariableArgs& Args, FUeaBpVariableReply& Reply);
UeaTool(obrigatório):<kit>.<verbo>_<objeto>em snake_case.Mutates: qualquer alteração em assets/nível/configurações. O core envolve a chamada em uma transação.Destructive: exclusões ou operações irreversíveis (definaMutatestambém).MinEngine="5.1": oculta a ferramenta em engines mais antigas. Prefira isso a excluir a ferramenta da compilação.- Exatamente dois parâmetros:
const FArgs&eFReply&(saída). Structs de reply derivam deFUeaReply(emUeaTypes.h). Reporte falhas comReply.Fail(UeaErr::NotFound, "...", "hint")e retorne; nunca lance exceções, nunca usecheck()em entrada do usuário. - Toda UPROPERTY recebe um
/** tooltip */(ele vira a descrição no JSON schema).meta=(Required)marca entradas obrigatórias. Campos bool usam o prefixobem C++ (bRecursive) e aparecem sem ele no JSON (recursive). - Vetores/rotators usam
FUeaVec3(rotator = pitch, yaw, roll). Referências a objetos são strings resolvidas comUeaHelpers::LoadAssetLoose/ResolveClass/LoadBlueprintLoose. - Retorne respostas ricas: após uma mutação, devolva o novo estado (ex.: a lista de variáveis), para que o agente não precise de uma segunda chamada.
- Nomes: use
FStringnos args (agentes enviam texto); converta paraFNameinternamente.
Compatibilidade de engine (UE 4.27.2 → 5.8.2)
- Somente código compatível com C++17 (não defina CppStandard no Build.cs; cada engine usa o seu padrão). Sem
<format>,<ranges>, concepts ou designated initializers. - Sem
TObjectPtrno seu código (ponteiros brutos em membros de USTRUCT/UCLASS funcionam em todas as versões). - Use
UeaCompat.h:UEA_ENGINE_AT_LEAST(5,1),UEA_PIN_CATEGORY_FLOAT,UEA_ARFILTER_ADD_CLASS,UEA_ASSETDATA_OBJECT_PATH,UEA_IMPORT_TEXT/UEA_EXPORT_TEXT,FUeaReal. - Antes de usar qualquer API da engine, verifique que ela existe com a mesma assinatura em AMBAS as tags
do clone da engine
D:\GameEngineProjects\Unreal\EpicGames\UnrealEngine:git show 4.27.2-release:Engine/Source/...egit show 5.8.2-release:Engine/Source/.... Se houver diferença, adicione uma macro/inline emUeaCompat.hou ramifique com#if UEA_ENGINE_AT_LEAST. - O Enhanced Input na 4.27 fica em
Engine/Plugins/Experimental/EnhancedInput; na 5.x emEngine/Plugins/EnhancedInput. O nome do módulo éEnhancedInputem ambas. FKismetEditorUtilities::CreateBlueprint(ParentClass, Outer, Name, BPTYPE_Normal, UBlueprint::StaticClass(), UBlueprintGeneratedClass::StaticClass(), CallingContext)é igual nas duas.FBlueprintEditorUtils::AddMemberVariable/RemoveMemberVariable/RenameMemberVariabletambém.UEdGraphSchema_K2::PC_Float(4.27) vsPC_Real+PC_Double(5.x): useUEA_PIN_CATEGORY_FLOAT.- Asset registry
FARFilter::ClassNames(4.27/5.0) vsClassPaths(5.1+):UEA_ARFILTER_ADD_CLASS. FAssetData::ObjectPath(≤5.0) vsGetSoftObjectPath()(5.1+):UEA_ASSETDATA_OBJECT_PATH.
Estilo
- Helpers anônimos com namespace dentro do .cpp; sem headers de "helpers de ferramentas" compartilhados entre kits.
- Sem parsing de
FJsonObjectnos kits: o core converte JSON ↔ structs. - Faça log com
UE_LOG(LogUEAMCP, ...)apenas para avisos; resultados vão na reply. - Blocos de comentário em inglês; cabeçalho de copyright
// Copyright (c) 2026 MNZ Sistemas. All rights reserved. - Não referencie, copie ou parafraseie código de
D:\GameEngineProjects\Unreal\UltimateEngineCopilot. Use somente os headers da engine e este repositório.
Arquivo de guia
Docs/guides/<kit>.md: o que o kit faz, uma receita de 5–10 passos para o fluxo de trabalho comum e as
pegadinhas (compilar antes de usar, nomes com espaços etc.). Escrito para um agente de IA, em inglês.