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、结束 