您现在的位置是:首页 >技术杂谈 >UE引擎的Module And Plugin网站首页技术杂谈
UE引擎的Module And Plugin
一、Module
模块是实现一个或多个类功能的集合,当模块足够独立和庞大、复杂后,可以提升为插件。
UE引擎是由众多模块组成,插件也可以包含一个或多个模块,但模块却不能包含插件。先对模块来讲,插件具有更高的独立性,除使用引擎模块外,一般不使用其他插件和模块。并且插件可以非常方便的一直到不同项目中使用。
二、Plugin
插件也是一个模块,说到插件必须讲到耦合性与独立性,耦合性是对模块间关联程度的度量,模块间关联越强,则耦合性强,独立性差。
庞大的UE4引擎各模块相互参差作用,所以想要读懂并拆解并非易事,而创建UE4游戏项目实则只引入了引擎的部分模块,再想想如果很多游戏项目都需要用到这一个自定义功能时,是不是每个项目都要开发一次这个功能,个人或者一家公司内部还好,只要把项目代码复制给另一个项目即可,但是全球这么多的UE4开发者怎么办,开发者的结晶势必要发挥它最大的用处,把自己的研发成果分享出去,为了解决这类问题,就要使得模块独立起来,那么UE4插件就该闪亮登场了
UE4引擎拥有插件管理模块并提供了插件加载卸载和其他功能接口,所以UE4插件可以自定义功能,因为其独立性强可以发布共享,且使用方便。
三、UE4引擎、项目、插件的区别
-
UE4引擎由Epic官方维护与发布,源码托管在GitHub平台上
-
UE4项目是基于某个版本而创建的Game项目,在Game项目中可以设计关卡、摆放场景、添加功能、发布应用程序等,发布后可以脱离引擎独立运行。
-
UE4插件可以增加UE4的扩展性,丰满Game项目,也可让开发应用程序变得简单且多样化,但其不能独立运行。
四、插件目录
- Binaries:编译后的dll文件存放位置
- Content:游戏资源Asset文件存放位置
- Intermediate:编译的中间文件存放位置
- Resources:一般为图片图标的存放位置
- Source:代码存放位置
- .uplugin文件:插件项目配置文件,JSON格式
- .Build.cs文件:每个 .build.cs 文件声明派生自 ModuleRules 基类的类,并设置属性控制器从构造函数进行编译的方式。由虚幻编工具编译,并被构造来确定整体编译环境。使用C#语法
五、插件配置文件说明 *.uplugin
- Category:类目名即在插件浏览器中所属的类目。
- Installed:默认启用或禁用状态,在插件浏览器中可以控制加载卸载插件模块。
- Modules:描述模块名、运行类型、加载时机、支持平台等信息。
- Type:Runtime,RuntimeNoCommandlet,Developer,Editor,EditorNoCommandlet,Program。
- LoadingPhase:Default,PreDefault,PostConfigInit,PostConfigInit。
- WhitelistPlatforms:支持的平台
- BlacklistPlatforms:不支持的平台
六、Build.cs文件
配置文件中的属性说明
-
public class PanoCam : ModuleRules 中的PanoCam为模块名,代码引用中认准这个名字
-
PCHUsage = ModuleRules.PCHUsageMode.UseExplicitOrSharedPCHs
预编译标头使用显示或共享标头。 -
PublicIncludePathModuleNames (List)
带有标头文件的模块名称列表(无需路径),需要由模块的公共标头访问,但不需要再“导入”或链接 -
PublicDependencyModuleNames (List)
公共依赖性模块名称列表(不需要路径)(自动包含私有/公共)。这些是公共源文件所需的模块 -
PrivateIncludePathModuleNames (List)
带有标头文件的模块名称列表(无需路径),需要由模块的私有代码文件访问,但不需要再“导入”或链接。 -
PrivateDependencyModuleNames (List)
私有依赖性模块名称列表。这些是私有代码所依赖的模块,但公共include文件中没有任何依赖。 -
DynamicallyLoadedModuleNames (List)
此模块在运行时可能需要的附加模块。 -
PublicSystemIncludePaths (List)
系统/库include路径列表,通常用于外部(第三方)模块。在解析标头依赖项时未检查的公共稳定标头文件目录。 -
PublicIncludePaths (List)
(当前不需要此设置,因为可以从“Public”文件夹中搜索所有文件)公开给其他模块的include文件的所有路径列表。 -
PrivateIncludePaths (List)
此模块内部include文件的所有路径的列表,未公开给其他模块(至少有一个包含在“私有”路径中,如果要避免相对路径,可以添加更多) -
PublicLibraryPaths (List)
系统/库路径列表(.lib文件的目录),通常用于外部(第三方)模块。 -
PublicAdditionalLibraries (List)
其他库的列表(包括扩展名的.lib文件的名称),通常用于外部(第三方)模块。 -
RuntimeDependencies(List)
运行时依赖的dll,运行后会自动复制并添加依赖
-
Build.cs配置文件一个重要技巧
如果插件中有依赖非UAsset文件,打包时需要手动拷贝到打包对应路径下,使用一下方法可使其自动拷贝过去 -
PublicIncludePaths和PrivateIncludePaths可以接受特殊字符串开头的字符串:
- $(ModuleDir) 表示模块目录,如:E:UE5_ProjectTestPluginsMotionMocapSourceMotionMocap)
- $(PluginDir) 表示插件目录(E:UE5 estSlatePluginsMotionMocap)
- $(EngineDir) 表示引擎目录(D:Program Files (x86)UEUE_5.0Engine)
- $(ProjectDir) 表示工程目录(E:UE5_ProjectTest)
-
对于非插件中的模块:PublicIncludePaths 和 PrivateIncludePaths 不接受特殊字符串
七、插件类型
四种常用模式的插件模板
- Blank
空白模板,最简洁的结构,只有模块类和加载卸载函数,一张白纸最好作画了。
BlueprintLibrary
蓝图功能库模板,都是静态函数,提供给蓝图直接调用的,如果只是单一的功能集的话,用此模板最快捷 - EditorToolbarButton
编辑器工具栏按钮模板,此模板在模块加载时会在UE4编辑器工具栏中注册一个按钮,点击此按钮将触发插件模块中的PluginButtonClicked函数。 - EditorStandaloneWindow
编辑器独立窗口模板,顾名思义,它将创建出一个窗口,可以在此窗口中自定义界面,像引擎编辑器的各个界面一样的效果。
八、插件发布,不带源码设置
不带源码发布
纯蓝图项目
删除插件的Intermediate和Source文件夹中的Public和Private文件夹,只保留.Build.cs文件,修改.uplugin文件
//部分省略 ,需添加 "EnabledByDefault": false,否则启动打包程序运行将失败
"EnabledByDefault": false,
"Installed": true,
C++项目
删除插件Source文件夹中的Public和Private文件夹,只保留.Build.cs文件,需要修改.Build.cs文件内容
//若存在bPrecompile = true; 则替换成bUsePrecompiled = true;
//否则添加bUsePrecompiled = true;
不然其他C++项目使用此插件会重编译插件失败,若编译项目后放置插件虽然能在编辑器上使用但打包会报错,报错提示需要设置这么一个东西:PrecompileForTargets = PrecompileTargetsType.None