您现在的位置是:首页 >技术杂谈 >UE引擎的Module And Plugin网站首页技术杂谈

UE引擎的Module And Plugin

longlongway2012 2024-07-24 06:01:03
简介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)
  • 对于非插件中的模块:PublicIncludePathsPrivateIncludePaths 不接受特殊字符串

七、插件类型

四种常用模式的插件模板

  • 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

九、reference

风语者!平时喜欢研究各种技术,目前在从事后端开发工作,热爱生活、热爱工作。