虚幻引擎生成式AI支持插件

该插件为虚幻引擎提供生成式AI集成支持,包括多种AI模型的API接入和模型控制协议(MCP),适用于游戏开发和虚拟场景构建。

  • by prajwalshettydev
  • C++
  • 本地部署
  • 679 星标
  • 更新于
在 GitHub 查看 prajwalshettydev/UnrealGenAISupport

使用说明

使用示例:

MCP示例:

Claude生成场景对象并控制其变换和材质,生成蓝图、函数、变量,添加组件,运行python脚本等。

API示例:

一个名为“成为人类”的项目,其中NPC是OpenAI代理实例。使用此插件构建。

虚幻引擎生成AI支持插件:

每个月,各种组织都会发布数百种新的人工智能模型,这使得很难跟上最新的进展。

“虚幻引擎生成AI支持插件”允许您专注于游戏开发,而无需担心LLM/GenAI集成层。

当前进展:

此插件将继续获得最新功能和型号的更新。欢迎捐款。 对于具有200多个AI模型、有保证的稳定性、自动化测试和UE 5.1-5.7+支持的生产就绪替代品,请查看下面的专业插件。 这个免费插件涵盖了许多用例(包括上面的示例),你可以永远免费使用它。

Fab.com上的专业插件

Gen AI Pro
gpt-5.4 claude-opus-4-6 gemini-3.1-pro grok-4.1 o3-pro eleven_v3
Chat, Vision, Streaming, Realtime, Image Gen, TTS, Structured Output, Tool Use

Gen AI Pro China
qwen3.5-plus kimi-k2.5 glm-5 seed-2-0 ernie-5.0 seedream-4
Worldwide support, Chat, Vision, Image Gen, TTS, Reasoning

GenAI Model Generator
meshy-6 tripo-v2.5 hunyuan3d-v3.1 trellis-2 rodin-gen-2
Text-to-3D, Image-to-3D, Remesh, PBR Textures, Retexture, Auto-Rigging

Gen AI Llama
Ollama vLLM LM Studio GGUF Jan LocalAI GPT-oss LLaVA
Local LLMs inside your Unreal Engine game - no API keys needed


免费插件(此Repo)-LLM/GenAI API支持:

  • 开放人工智能:聊天(gpt-4.1, gpt-4.1-mini, o4-mini, o3, o3-pro),结构化输出
  • 安thropic克劳德:聊天(claude-4-latest, claude-3-7-sonnet, claude-3-5-sonnet, claude-3-5-haiku)
  • XAI Grok:聊天(grok-3-latest, grok-3-mini-beta)
  • 深度求索:聊天(deepseek-chat V3.1),推理(deepseek-reasoning-r1)
  • 本地AI: 麻省理工学院(MIT) - gpt-oss, qwen3-vl 以及更多
Full Model List (200+ models across all plugins)

Gen AI Pro

  • 开放人工智能: gpt-5.4, gpt-5.4-pro, gpt-5.3-codex, gpt-5.2, gpt-5.1, gpt-5, gpt-5-mini, gpt-5-nano, gpt-4.1, o4-mini, o3, o3-pro |响应API、愿景、实时(gpt-realtime),图像生成器(gpt-image-1.5, dall-e-3),TTS(gpt-4o-mini-tts, whisper-1),流媒体,函数调用,多模式
  • 人类: claude-opus-4-6, claude-sonnet-4-6, claude-4.5-opus, claude-4.5-sonnet, claude-4.5-haiku |扩展思维、愿景、工具使用
  • 谷歌双子座: gemini-3.1-pro, gemini-3.1-flash-lite, gemini-2.5-pro, gemini-2.5-flash |图像(imagen-4.0-generate, imagen-4.0-ultra)、实时、TTS、多模式
  • XAI Grok: grok-4.1, grok-4, grok-4-eu, grok-code-fast-1, grok-3 |视觉、流媒体、推理
  • 十一实验室:TTS(eleven_v3, eleven_turbo_v2_5),转录(scribe_v2),音效(eleven_text_to_sound_v2)
  • 全球人工智能:TTS(inworld-tts-1.5-max, inworld-tts-1.5-mini)
  • OpenAI兼容模式:阿里巴巴Qwen、Mistral、Groq、OpenRouter、Meta Llama、GLM-4、Ollama

Gen AI Pro中国

  • 阿里巴巴Qwen: qwen3.5-plus, qwen3.5-flash, qwen3-max, qwen3-coder-plus |多式联运(qwen-omni-turbo, qwen-vl-max),图像生成器(qwen-image, wan2.2-t2i-plus),TTS(qwen3-tts-flash)
  • 登月计划/基米: kimi-k2.5, kimi-k2-thinking, kimi-k2-thinking-turbo |多式联运(kimi-latest)
  • 字节跳动: seed-2-0-mini, seed-1-8, skylark-pro-250415 |愿景(skylark-vision),图像生成器(seedream-4-0-250828)
  • 智普艾: glm-5, glm-4.7, glm-4.7-flash |多式联运(glm-4.6v)
  • 百度: ernie-5.0-8k, ernie-4.5-8k, ernie-x1-32k

GenAI模型生成器(3D)

  • 网格AI: meshy-6 -文本转3D,图像转3D,重新组合,自动装配
  • Tripo AI: tripo-v2.5 -文本转3D,图像转3D
  • 浑源3D (腾讯): hunyuan3d-v3.1-pro 文本转3D, hunyuan3d-v2.1 图像转3D
  • 三脚架:图像转换为3D(快速,<1s)
  • 罗丹 (Hyper3D): rodin-gen-2 -文本/图像到3D,带PBR材料
  • 格架2 (微软):使用PBR材料将图像转换为3D
  • 谷歌双子座: gemini-3.1-flash -PBR纹理生成

附加功能:

  • 插件示例项目 这里
  • 版本控制:Git子模块支持,Perforce(进行中)
  • 轻量级:无外部依赖,从构建中排除MCP
  • 跨平台和引擎版本的测试(在专业插件中可用)

虚幻MCP(模型控制协议):

其他MCP选项: Epic Games正在为UE 5.8+开发虚幻MCP官方集成。还有 不合理的赞美 Natfii(麻省理工学院)-一个值得一试的独立虚幻MCP实现。此插件的MCP支持针对UE 5.4-5.7+,可与Claude Desktop、Claude Code和Cursor配合使用。 注: 这个免费插件中的MCP没有得到积极开发——下面列出的功能反映了当前的状态。

MCP Feature Status (✅ = Done, 🛠️ = In Progress, 🚧 = Planned)
  • 客户支持✅
    • Claude桌面应用程序支持✅
    • Claude代码CLI支持✅
    • 游标IDE支持✅
    • OpenAI运营商API支持🚧
  • 蓝图汽车生成🛠️
    • 创建新的类型蓝图✅
    • 添加新函数、函数/蓝图变量✅
    • 添加节点和连接🛠️ (有问题,问题未解决)
    • 高级蓝图生成🛠️
  • LLM的级别/场景控制🛠️
    • 生成物体和形状✅
    • 移动、旋转和缩放对象✅
    • 更改材质和颜色✅
    • 高级场景功能🛠️
  • 生成型人工智能:
    • 提示获取和生成3D模型🛠️
  • 控制:
    • 能够运行Python脚本✅
    • 能够运行控制台命令✅
  • UI:
    • 小部件生成🛠️
    • UI蓝图生成🛠️
  • 项目文件:
    • 创建/编辑项目文件/文件夹️✅
    • 删除现有项目文件❌
  • 其他:
    • 项目清理🛠️

目录

设置API密钥:

[!注意]
不需要设置API密钥来测试Claude应用程序中的MCP功能。只有Claude API需要使用无烟煤钥匙。

对于编辑:

设置环境变量 PS_<ORGNAME> 到您的API密钥。

对于Windows:

setx PS_<ORGNAME> "your api key"

对于Linux/MacOS:

  1. 在终端中运行以下命令,将您的密钥替换为API密钥。

    echo "export PS_<ORGNAME>='yourkey'" >> ~/.zshrc
    
  2. 使用新变量更新shell:

    source ~/.zshrc
    

PS:设置环境变量后,不要忘记重新启动编辑器和连接的IDE。

哪里 <ORGNAME> 可以是: PS_OPENAIAPIKEY, PS_DEEPSEEKAPIKEY, PS_ANTHROPICAPIKEY, PS_METAAPIKEY, PS_GOOGLEAPIKEY 等等

对于打包构建:

将API密钥存储在打包的构建中是一个安全风险。以下是OpenAI API文档对它的描述:

“在浏览器或移动应用程序等客户端环境中暴露您的OpenAI API密钥会让恶意用户获取该密钥并代表您提出请求,这可能会导致意外收费或某些帐户数据泄露。请求应始终通过您自己的后端服务器进行路由,在那里您可以确保API密钥的安全。”

阅读更多 这里.

对于测试构建,您可以调用 GenSecureKey::SetGenAIApiKeyRuntime 使用打包构建中的API键,使用c++或blueprint函数。

设置MCP:

[!注意]
如果您的项目只使用LLM API而不使用MCP,则可以跳过本节。

[!小心]
Discalimer:如果你使用的是插件的MCP功能,它将直接让Claude Desktop App控制你的虚幻引擎项目。 确保您了解安全风险,并且只在受控环境中使用它。

请在使用MCP功能之前备份您的项目,并使用版本控制来跟踪更改。

1.安装以下任一客户端:
  • Claude桌面应用程序来自 这里.
  • Claude代码命令行界面 这里.
  • 光标IDE来自 这里.
2.设置mcp配置json:
对于Claude桌面应用程序:

claude_desktop_config.json Claude Desktop App安装目录中的文件。(可能会问克劳德,你的平台在哪里!) 文件看起来像这样:

{
    "mcpServers": {
      "unreal-handshake": {
        "command": "python",
        "args": ["<your_project_directoy_path>/Plugins/GenerativeAISupport/Content/Python/mcp_server.py"],
        "env": {
          "UNREAL_HOST": "localhost",
          "UNREAL_PORT": "9877" 
        }
      }
    }
}
对于Claude Code CLI:

.mcp.json 项目根目录中的文件。文件看起来像这样:

{
    "mcpServers": {
      "unreal-handshake": {
        "type": "stdio",
        "command": "python",
        "args": ["<your_project_directoy_path>/Plugins/GenerativeAISupport/Content/Python/mcp_server.py"],
        "env": {
          "UNREAL_HOST": "localhost",
          "UNREAL_PORT": "9877"
        }
      }
    }
}
对于游标IDE:

.cursor/mcp.json 项目目录中的文件。文件看起来像这样:

{
    "mcpServers": {
      "unreal-handshake": {
        "command": "python",
        "args": ["<your_project_directoy_path>/Plugins/GenerativeAISupport/Content/Python/mcp_server.py"],
        "env": {
          "UNREAL_HOST": "localhost",
          "UNREAL_PORT": "9877"
        }
      }
    }
}
3.安装FastMCP。
pip install fastmcp
4.在虚幻引擎中启用python插件。(编辑->插件->Python编辑器脚本插件)
5.[可选]在编辑器打开时启用AutoStart MCP服务器

将插件添加到您的项目中:

使用Git:

  1. 将插件库作为子模块添加到项目的存储库中。

    git submodule add https://github.com/prajwalshettydev/UnrealGenAISupport Plugins/GenerativeAISupport
    
  2. 重新生成项目文件: 右键单击.uproject文件,然后选择“生成Visual Studio项目文件”。

  3. 在虚幻编辑器中启用插件: 在虚幻编辑器中打开您的项目。转到编辑>插件。在列表中搜索插件并启用它。

  4. 对于虚幻C++项目,将插件的模块包含在项目的Build.cs文件中:

    PrivateDependencyModuleNames.AddRange(new string[] { "GenerativeAISupport" });
    

使用Perforce:

仍在开发中。.

Fab(虚幻市场):

这个免费插件可以通过Git(上图)获得。对于专业插件,请检查 Fab.com.

获取最新插件更改:

使用Git:

您可以通过以下方式获取最新更改:

cd Plugins/GenerativeAISupport
git pull origin main

或者更新项目中的所有子模块:

git submodule update --recursive --remote

使用Perforce:

仍在开发中。.

用途:

有一个示例虚幻项目已经实现了该插件。你可以找到它 这里.

OpenAI:

目前该插件支持OpenAI API的聊天和结构化输出。既适用于C++,也适用于蓝图。 测试型号: gpt-4.1, gpt-4.1-mini, gpt-4.1-nano, o4-mini, o3, o3-pro, o3-mini.

1.聊天:

C++示例:
    void SomeDebugSubsystem::CallGPT(const FString& Prompt, 
        const TFunction<void(const FString&, const FString&, bool)>& Callback)
    {
        FGenChatSettings ChatSettings;
        ChatSettings.Model = TEXT("gpt-4o-mini");
        ChatSettings.MaxTokens = 500;
        ChatSettings.Messages.Add(FGenChatMessage{ TEXT("system"), Prompt });
    
        FOnChatCompletionResponse OnComplete = FOnChatCompletionResponse::CreateLambda(
            [Callback](const FString& Response, const FString& ErrorMessage, bool bSuccess)
        {
            Callback(Response, ErrorMessage, bSuccess);
        });
    
        UGenOAIChat::SendChatRequest(ChatSettings, OnComplete);
    }
蓝图示例:

2.结构化输出:

C++示例1:

将自定义模式json直接发送到函数调用

FString MySchemaJson = R"({
"type": "object",
"properties": {
    "count": {
        "type": "integer",
        "description": "The total number of users."
    },
    "users": {
        "type": "array",
        "items": {
            "type": "object",
            "properties": {
                "name": { "type": "string", "description": "The user's name." },
                "heading_to": { "type": "string", "description": "The user's destination." }
            },
            "required": ["name", "role", "age", "heading_to"]
        }
    }
},
"required": ["count", "users"]
})";

UGenAISchemaService::RequestStructuredOutput(
    TEXT("Generate a list of users and their details"),
    MySchemaJson,
    [](const FString& Response, const FString& Error, bool Success) {
       if (Success)
       {
           UE_LOG(LogTemp, Log, TEXT("Structured Output: %s"), *Response);
       }
       else
       {
           UE_LOG(LogTemp, Error, TEXT("Error: %s"), *Error);
       }
    }
);
C++示例2:

从文件发送自定义模式json

#include "Misc/FileHelper.h"
#include "Misc/Paths.h"
FString SchemaFilePath = FPaths::Combine(
    FPaths::ProjectDir(),
    TEXT("Source/:ProjectName/Public/AIPrompts/SomeSchema.json")
);

FString MySchemaJson;
if (FFileHelper::LoadFileToString(MySchemaJson, *SchemaFilePath))
{
    UGenAISchemaService::RequestStructuredOutput(
        TEXT("Generate a list of users and their details"),
        MySchemaJson,
        [](const FString& Response, const FString& Error, bool Success) {
           if (Success)
           {
               UE_LOG(LogTemp, Log, TEXT("Structured Output: %s"), *Response);
           }
           else
           {
               UE_LOG(LogTemp, Error, TEXT("Error: %s"), *Error);
           }
        }
    );
}
蓝图示例:

DeepSeek API:

目前该插件支持DeepSeek API的聊天和推理。既适用于C++,也适用于蓝图。 注意事项:

  • 系统消息目前对推理模型是强制性的。API似乎返回null
  • 此外,在文档中:“请注意,如果输入消息序列中包含reasoning_content字段,API将返回400错误。 阅读更多 这里"

[!警告]
在使用R1推理模型时,确保虚幻引擎的HTTP超时不是30秒的默认值。 因为这些API调用可能需要30秒以上的时间才能响应。只需设置 HttpRequest->SetTimeout(<N Seconds>); 不够 因此,需要将以下行添加到您的项目中 DefaultEngine.ini 文件:

[HTTP]
HttpConnectionTimeout=180
HttpReceiveTimeout=180

1.聊天和推理:

C++示例:
 FGenDSeekChatSettings ReasoningSettings;
 ReasoningSettings.Model = EDeepSeekModels::Reasoner; // or EDeepSeekModels::Chat for Chat API
 ReasoningSettings.MaxTokens = 100;
 ReasoningSettings.Messages.Add(FGenChatMessage{TEXT("system"), TEXT("You are a helpful assistant.")});
 ReasoningSettings.Messages.Add(FGenChatMessage{TEXT("user"), TEXT("9.11 and 9.8, which is greater?")});
 ReasoningSettings.bStreamResponse = false;
 UGenDSeekChat::SendChatRequest(
     ReasoningSettings,
     FOnDSeekChatCompletionResponse::CreateLambda(
         [this](const FString& Response, const FString& ErrorMessage, bool bSuccess)
         {
             if (!UTHelper::IsContextStillValid(this))
             {
                 return;
             }

             // Log response details regardless of success
             UE_LOG(LogTemp, Warning, TEXT("DeepSeek Reasoning Response Received - Success: %d"), bSuccess);
             UE_LOG(LogTemp, Warning, TEXT("Response: %s"), *Response);
             if (!ErrorMessage.IsEmpty())
             {
                 UE_LOG(LogTemp, Error, TEXT("Error Message: %s"), *ErrorMessage);
             }
         })
 );
蓝图示例:

无烟煤API:

目前该插件支持来自Anthropic API的聊天。既适用于C++,也适用于蓝图。 测试型号: claude-4-latest, claude-3-7-sonnet-latest, claude-3-5-sonnet, claude-3-5-haiku-latest.

1.聊天:

C++示例:
    // ---- Claude Chat Test ----
    FGenClaudeChatSettings ChatSettings;
    ChatSettings.Model = EClaudeModels::Claude_3_7_Sonnet; // Use Claude 3.7 Sonnet model
    ChatSettings.MaxTokens = 4096;
    ChatSettings.Temperature = 0.7f;
    ChatSettings.Messages.Add(FGenChatMessage{TEXT("system"), TEXT("You are a helpful assistant.")});
    ChatSettings.Messages.Add(FGenChatMessage{TEXT("user"), TEXT("What is the capital of France?")});
    
    UGenClaudeChat::SendChatRequest(
        ChatSettings,
        FOnClaudeChatCompletionResponse::CreateLambda(
            [this](const FString& Response, const FString& ErrorMessage, bool bSuccess)
            {
                if (!UTHelper::IsContextStillValid(this))
                {
                    return;
                }
    
                if (bSuccess)
                {
                    UE_LOG(LogTemp, Warning, TEXT("Claude Chat Response: %s"), *Response);
                }
                else
                {
                    UE_LOG(LogTemp, Error, TEXT("Claude Chat Error: %s"), *ErrorMessage);
                }
            })
    );
蓝图示例:

XAI的Grok 3 API:

目前该插件支持来自XAI的Grok 3 API的聊天。既适用于C++,也适用于蓝图。

1.聊天:

	FGenXAIChatSettings ChatSettings;
	ChatSettings.Model = TEXT("grok-3-latest");
		ChatSettings.Messages.Add(FGenXAIMessage{
		TEXT("system"),
		TEXT("You are a helpful AI assistant for a game. Please provide concise responses.")
	});
	ChatSettings.Messages.Add(FGenXAIMessage{TEXT("user"), TEXT("Create a brief description for a forest level in a fantasy game")});
	ChatSettings.MaxTokens = 1000;

	UGenXAIChat::SendChatRequest(
		ChatSettings,
		FOnXAIChatCompletionResponse::CreateLambda(
			[this](const FString& Response, const FString& ErrorMessage, bool bSuccess)
			{
				if (!UTHelper::IsContextStillValid(this))
				{
					return;
				}
				
				UE_LOG(LogTemp, Warning, TEXT("XAI Chat response: %s"), *Response);
				
				if (!bSuccess)
				{
					UE_LOG(LogTemp, Error, TEXT("XAI Chat error: %s"), *ErrorMessage);
				}
			})
	);

模型控制协议(MCP):

这项工作目前正在进行中。该插件支持各种客户端,如Claude Desktop App、Cursor等。

用途:

如果启用了自动启动MCP服务器:(在插件的设置中)

1.打开虚幻引擎编辑器。
2.打开克劳德桌面应用程序、克劳德代码CLI或光标IDE。

就是这样!现在,您可以使用该插件的MCP功能。

如果禁用自动启动MCP服务器:

1.从插件的python目录运行MCP服务器。
python <your_project_directoy>/Plugins/GenerativeAISupport/Content/Python/mcp_server.py
2.通过打开或重新启动Claude桌面应用程序或Cursor IDE来运行MCP客户端。
3.打开一个新的虚幻引擎项目,并从插件的python目录运行以下python脚本。

工具->运行Python脚本->选择 Plugins/GenerativeAISupport/Content/Python/unreal_socket_server.py 文件。

4.现在,您应该能够提示Claude桌面应用程序使用虚幻引擎。

已知问题:

  • 节点无法与MCP正确连接
  • MCP不支持撤消重做
  • Deepseek推理模型不支持流媒体
  • 创建材质工具不支持复杂的材质生成
  • 运行一些llm生成的有效python脚本时出现问题
  • 当LLM编译蓝图时,其响应中没有适当的错误处理
  • 生成某些节点的问题,尤其是使用getter和setter时
  • 在编辑场景和项目文件时,不会打开正确的上下文窗口。
  • 无法在蓝图编辑器中正确停靠窗口。

贡献指南:

为发展而设立:

  1. 安装 unreal python包,并设置IDE的python解释器以实现适当的智能感知。
pip install unreal

更多细节将很快添加。

项目结构:

更多细节将很快添加。

参考文献

快速链接:

支持这个项目

如果你觉得UnrealGenAISupport有帮助,可以考虑赞助我继续这个项目!点击上面的“赞助商”按钮进行贡献。