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

相关推荐
1204157137 肖哥1 天前
UE5.7 灯光详解
ue5
狂云歌2 天前
AI写UE的3Dgame
人工智能·3d·ue5·游戏程序
日月云棠6 天前
UE5源码分析之Editor——Blutility模块全面分析
ue5
日月云棠6 天前
UE5源码分析之Editor——BehaviorTreeEditor模块全面分析
ue5
日月云棠6 天前
UE5源码分析之Editor——AssetTagsEditor模块全面分析
ue5
远离UE47 天前
UE5 显存 虚拟内存 深入学习笔记
笔记·学习·ue5
日月云棠7 天前
UE5源码分析之Editor——AnimationSettings模块全面分析
ue5
远离UE48 天前
UE5 SF_VertexShader 如何使用
ue5
电子云与长程纠缠8 天前
UE5 Lyra PocketWorld进行3D内容UI预览 - 上
开发语言·学习·3d·ue5·游戏引擎
电子云与长程纠缠8 天前
UE5 Lyra PocketWorld进行3D内容UI预览 - 下
开发语言·学习·游戏·ui·ue5