- ♂️ 作者:海码007
- 专栏:UE虚幻引擎专栏
- 标题:【UE 插件】UE4 虚幻引擎 插件开发(带源码插件打包、无源码插件打包) 有这一篇文章就够了!!!
- ❣️ 寄语:将来的自己肯定会感谢现在努力的你!
- 最后:文章作者技术和水平有限,如果文中出现错误,希望大家能指正
随着项目体量的增大,所有代码功能都放一起很难管理。所以有什么办法可以将大模块划分成一个个小模块吗。当然有,因为虚幻引擎本身就遇到过这个问题,他的解决办法就是使用插件的形式开发。
例如,一个团队开发了文件I/O模块插件,另一个团队开发了网络模块,那么大家各个模块可以统一的组合,那样虚幻引擎的功能就可以快速状态。
创建插件之前,必须已经有一个UE C++的工程
- 打开【工具】栏新建C++类,父类选择【蓝图函数库】(相当于C++的全局函数,其他蓝图类可以直接使用)
此时插件的功能就制作完成,只需要打包插件即可。
- 测试打包后的插件能否正常使用(注意:测试的工程一定要与插件编译的版本保持一致,即都是UE4.27版本或者UE5.0版本)
为什么可以不用源码:插件编译后生成了动态库文件,若是删除插件源码的话,就不能再进行编译。所以就不需要让插件编译,bUsePrecompiled = true; 就可以不让插件编译。(就和使用动态库一样,只需要保留头文件,还有动态库文件就可以让别人使用)
注意:无源码插件是在已经打包好插件的基础上,进行一些修改。然后再将程序给别人使用。
插件有两种使用方法:
- 使用极少量的代码创建一个空白插件
- 如果想要从头开始设置,或创建一个不可见的插件,请选择此模版。用此模板创建的插件将会出现在编辑器的插件列表中,但不会注册任何按钮或菜单输入。
- 创建一个值包含内容的空白插件。
- 这个模板创建出来是真正意义上的空白插件,什么都没有(一般不会用这个模板)。不会生成C++代码。
- 创建一个插件,其将在关卡编辑器的工具栏中添加一个按钮。
- 首先在创建的"OnButtonClick"事件中实现一些内容
- 创建一个将含有编辑器模式的插件。
- 其将包含工具包范例,以指定出现在**“模式”选项卡**(在植物、地形等选项卡旁边)中的UI。其也将包含最基础的UI,展示编辑器交互和取消/回复功能的使用。
- 创建一个使用已包含第三方库的插件。
- 这可用作范例,展示如何自行包含、加载和使用第三方库
- 创建一个含有蓝图函数库的插件。
- 如果创建静态蓝图节点,请选择此模板
{
"FileVersion": 3,
"Version": 1,
"VersionName": "1.0",
"FriendlyName": "HHW_PluginTest",
"Description": "TestPlugin",
"Category": "Other", // 类目名即在插件浏览器中所属的类目
"CreatedBy": "hhw",
"CreatedByURL": "",
"DocsURL": "",
"MarketplaceURL": "",
"SupportURL": "",
"CanContainContent": true,
"IsBetaVersion": false,
"IsExperimentalVersion": false,
"Installed": false, // 默认启用或禁用状态,在插件浏览器中可以控制加载卸载插件模块
"Modules": [ // 描述模块名、运行类型、加载时机、支持平台等信息
{
"Name": "HHW_PluginTest",
"Type": "Runtime", // 有多种:Runtime,RuntimeNoCommandlet,Developer,Editor,EditorNoCommandlet,Program
"LoadingPhase": "Default",
"WhitelistPlatforms": [ // 支持的平台
"Win32",
"Win64"
]
}
]
}
// Copyright Epic Games, Inc. All Rights Reserved.
using UnrealBuildTool;
public class HHW_PluginTest : ModuleRules
{
public HHW_PluginTest(ReadOnlyTargetRules Target) : base(Target)
{
PCHUsage = ModuleRules.PCHUsageMode.UseExplicitOrSharedPCHs;
// 将bUsePrecompiled设置为true后,就不会让插件编译
//bUsePrecompiled = true;
//PrecompileForTargets = PrecompileTargetsType.None;
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",
// ... add other public dependencies that you statically link with here ...
}
);
PrivateDependencyModuleNames.AddRange(
new string[]
{
"CoreUObject",
"Engine",
"Slate",
"SlateCore",
// ... add private dependencies that you statically link with here ...
}
);
DynamicallyLoadedModuleNames.AddRange(
new string[]
{
// ... add any modules that your module loads dynamically here ...
}
);
}
}
- 增删代码时,没有更新VistualStudio项目(uproject文件上右键点击Generate Vistual Studio project files可更新重载项目代码)
- .Build.cs 代码语法错误导致编译错误。
- .uplugin内容语法错误导致启动失败。
- 第三方库路径配置错误,导致引入失败,头文件找不到或者链接lib文件失败。
- 引擎版本与插件版本不一致导致插件模块丢失不能使用。
- 插件的"Installed": false,或者插件浏览器中没有启动插件,导致插件模块没有找到。
- 插件的Module下的"Type"配置与实际项目运行类型不一致。
- .插件的Module下的"LoadingPhase"配置与项目实际使用插件模块时机不一致,导致插件模块没有找到。