UE5 插件打包成DLL

1、检查 XY_Net.uplugin

bash 复制代码
{
	"FileVersion": 3,
	"Version": 1,
	"VersionName": "1.0",
	"FriendlyName": "XY_Net",
	"Description": "网络通信插件。",
	"Category": "XY",
	"CreatedBy": "ray",
	"CreatedByURL": "",
	"DocsURL": "",
	"MarketplaceURL": "",
	"SupportURL": "",
	"CanContainContent": false,
	"IsBetaVersion": false,
	"IsExperimentalVersion": false,
	"Installed": false,
	"Modules": [
		{
			"Name": "XY_Net",
			"Type": "Runtime",
			"LoadingPhase": "Default",
			"PlatformAllowList": [
				"Win64"
			]
		}
	],
	"Plugins": [
		{
			"Name": "XY_Time",
			"Enabled": true
		},
		{
			"Name": "XY_Logging",
			"Enabled": true
		}
	]
}

要注意 PlatformAllowList 支持的平台。

2、编写 BuildDll.bat。

bash 复制代码
set EngineUATPath="C:/ue/UnrealEngine-5.7.1-release/Engine/Build/BatchFiles/RunUAT.bat"
set PluginPath="D:/project/DLLPlugPak/Plugins/XY/XY_Net/XY_Net.uplugin"
set OutputDir="C:/Users/YangRui/Desktop/DLLPak/XY/XY_Net"

%EngineUATPath%^
    BuildPlugin^
    -Plugin=%PluginPath%^
	-Package=%OutputDir%^
    -CreateSubFolder

EngineUATPath:引擎路径。

PluginPath:插件路径。

OutputDir:输出路径。

3、检查 XY_Net.uplugin 是否依赖其他非引擎插件。(如果没有则忽略这步)

如 XY_Net 依赖 XY_Time、XY_Logging。

需要将这两个插件拷贝至引擎的 Plugins 下。

运行 BuildDll.bat:

4、修改 XY_Net.Build.cs;

打开 C:\Users\YangRui\Desktop\DLLPak\XY\XY_Net\Source\XY_Net\XY_Net.Build.cs

cs 复制代码
// Copyright Epic Games, Inc. All Rights Reserved.

using UnrealBuildTool;

public class XY_Net : ModuleRules
{
	public XY_Net(ReadOnlyTargetRules Target) : base(Target)
	{
		PCHUsage = ModuleRules.PCHUsageMode.UseExplicitOrSharedPCHs;
		
		PublicIncludePaths.AddRange(
			new string[] {
				// ... add public include paths required here ...
			}
		);
				
		
		PrivateIncludePaths.AddRange(
			new string[] {
				// ... add other private include paths required here ...
			}
		);
			
		
		PublicDependencyModuleNames.AddRange(
			new string[]
			{
				"Core",
				"CoreUObject",
				"Engine"
				// ... add other public dependencies that you statically link with here ...
			}
		);

        PublicDependencyModuleNames.Add("Networking");
        PublicDependencyModuleNames.Add("Sockets");

        PublicDependencyModuleNames.Add("XY_Time");
        PublicDependencyModuleNames.Add("XY_Logging");


        PrivateDependencyModuleNames.AddRange(
			new string[]
			{
				
				// ... add private dependencies that you statically link with here ...	
			}
		);


        DynamicallyLoadedModuleNames.AddRange(
			new string[]
			{
				// ... add any modules that your module loads dynamically here ...
			}
		);

		// 启用RTTI,使用 dynamic_cast 需要设置为 true。(打包安卓会报错)
        // bUseRTTI = true;
		
		bUsePrecompiled = true;
	}
}

在底部添加 bUsePrecompiled = true;

5、删除 Source 下的 Private 目录。

6、放到工程插件目录下编译。

编译脚本 Build.bat

bash 复制代码
@echo off
chcp 65001 >nul
title DLLPlug 自动打包脚本

:: ============================================
:: 配置区域
:: ============================================
set PROJECT_NAME=DLLPlug
set PROJECT_FILE=%~dp0%PROJECT_NAME%.uproject

:: 引擎路径检测(优先使用环境变量,否则尝试默认路径)
if not defined UE_ENGINE_PATH (
    set UE_ENGINE_PATH=C:\ue\UnrealEngine-5.7.1-release
)

set UAT_PATH="%UE_ENGINE_PATH%\Engine\Build\BatchFiles\RunUAT.bat"
set BUILD_CONFIG=Development
set PLATFORM=Win64

:: 输出目录
set CLIENT_OUTPUT=%~dp0Package
set SERVER_OUTPUT=%~dp0Package

:: ============================================
:: 开始打包
:: ============================================
echo ============================================
echo    %PROJECT_NAME% 自动打包脚本
echo ============================================
echo.

:: 检查项目文件
if not exist "%PROJECT_FILE%" (
    echo [错误] 未找到项目文件: %PROJECT_FILE%
    pause
    exit /b 1
)

:: 检查UAT
if not exist %UAT_PATH% (
    echo [错误] 未找到 Unreal Automation Tool
    echo 请检查 UE_ENGINE_PATH 环境变量或修改脚本中的引擎路径
    echo 当前路径: %UE_ENGINE_PATH%
    pause
    exit /b 1
)

echo [信息] 引擎路径: %UE_ENGINE_PATH%
echo [信息] 项目文件: %PROJECT_FILE%
echo [信息] 构建配置: %BUILD_CONFIG%
echo [信息] 目标平台: %PLATFORM%
echo.

:: ============================================
:: 打包客户端
:: ============================================
echo ============================================
echo [1/2] 正在打包客户端...
echo ============================================

call %UAT_PATH% BuildCookRun^
    -project="%PROJECT_FILE%"^
    -noP4^
    -platform=%PLATFORM%^
    -clientconfig=%BUILD_CONFIG%^
    -serverconfig=%BUILD_CONFIG%^
    -cook^
    -allmaps^
    -stage^
    -pak^
    -prereqs^
    -archive^
    -archivedirectory="%CLIENT_OUTPUT%"^
    -build^
    -utf8output

if %ERRORLEVEL% neq 0 (
    echo [错误] 客户端打包失败!
    pause
    exit /b 1
)

echo [成功] 客户端打包完成!
echo.

:: ============================================
:: 打包服务器
:: ============================================
echo ============================================
echo [2/2] 正在打包服务器...
echo ============================================

call %UAT_PATH% BuildCookRun^
    -project="%PROJECT_FILE%"^
    -noP4^
    -platform=%PLATFORM%^
    -clientconfig=%BUILD_CONFIG%^
    -serverconfig=%BUILD_CONFIG%^
    -cook^
    -server^
    -serverplatform=%PLATFORM%^
    -stage^
    -pak^
    -prereqs^
    -archive^
    -archivedirectory="%SERVER_OUTPUT%"^
    -build^
    -utf8output

if %ERRORLEVEL% neq 0 (
    echo [错误] 服务器打包失败!
    pause
    exit /b 1
)

echo [成功] 服务器打包完成!
echo.

:: ============================================
:: 完成
:: ============================================
echo ============================================
echo 所有打包任务完成!
echo 客户端: %CLIENT_OUTPUT%
echo 服务器: %SERVER_OUTPUT%
echo ============================================
echo.
pause
exit /b 0

运行 Build.bat。

源码版可能会报错

Missing precompiled manifest for 'XY_Net', 'D:\project\DLLPlug\Intermediate\Build\Win64\x64\DLLPlug\Development\XY_Net\XY_Net.precompiled. This module can not be referenced in a monolithic precompiled build, remove this reference or migrate to a fully compiled source build.

This module was most likely not flagged during a release for being included in a precompiled build - set 'PrecompileForTargets = PrecompileTargetsType.Any;' in XY_Net.Build.cs to override.

As it is part of the plugin 'XY_Net', also check if its 'Type' is correct.

Dependent modules 'DLLPlug'

Missing precompiled manifest for 'XY_Net', 'D:\project\DLLPlug\Intermediate\Build\Win64\x64\DLLPlug\Development\XY_Net\XY_Net.precompiled

解决方案:将 C:\Users\YangRui\Desktop\DLLPak\XY\XY_Net\Intermediate\Build\Win64\x64\UnrealGame\Development 目录下的 XY_Net 文件夹拷贝至 D:\project\DLLPlug\Intermediate\Build\Win64\x64\DLLPlug\Development 下

如果是打的 Shipping,则拷贝 Shipping 的。

C++代码引用了插件的代码,可能会报以下错误。

8/666\] Compile \[x64\] Module.DLLPlug.gen.cpp D:\\project\\DLLPlug\\Plugins\\XY\\XY_Net\\Source\\XY_Net\\Public\\XY_Net_AddressData.h(6,1): fatal error C1083: �޷��򿪰����ļ�: ��XY_Net_AddressData.generated.h��: No such file or directory #include "XY_Net_AddressData.generated.h" \^ \[9/666\] Compile \[x64\] MyXY_Net_AC_UDP.cpp D:\\project\\DLLPlug\\Plugins\\XY\\XY_Net\\Source\\XY_Net\\Public\\XY_Net_AddressData.h(6,1): fatal error C1083: �޷��򿪰����ļ�: ��XY_Net_AddressData.generated.h��: No such file or directory #include "XY_Net_AddressData.generated.h" \^ 解决方案: 将 C:\\Users\\YangRui\\Desktop\\DLLPak\\XY\\XY_Net\\Intermediate\\Build\\Win64\\UnrealGame\\Inc\\XY_Net 拷贝至 D:\\project\\DLLPlug\\Intermediate\\Build\\Win64\\DLLPlug\\Inc。 7、结束 ![](https://i-blog.csdnimg.cn/direct/e0087c1d790e47c3a47636a7de1f232a.png)

相关推荐
UTwelve2 天前
【UE】SDF - 使用有向距离场(Signed Distance Fields)整各种活-4-将图片制作为距离场图
ue5·photoshop·贴图·着色器
maplewen.3 天前
【UE】GAS 概述
ue5
dong1326973 天前
UE5动画(上)
ue5
吴梓穆3 天前
UE5 c++打印日志
开发语言·c++·ue5
吴梓穆3 天前
UE5 C++ 绘制图形调试宏
开发语言·c++·ue5
chudonghao4 天前
[UE学习笔记][基于源码] 理解 Gameplay
c++·笔记·学习·ue5
爱搞虚幻的阿恺4 天前
RPG游戏开发【加餐】实现游戏小地图的简单方法
游戏·ue5·游戏引擎·虚幻
平行云PVT6 天前
数字孪生信创云渲染技术解析:从混合信创到全国产化架构
linux·unity·云原生·ue5·图形渲染·webgl·gpu算力
Дерек的学习记录7 天前
Unreal Engine 5:前置知识和入门基础
学习·ue5