|
先记录一下UE4插件一些基础知识。
1、插件创建面板简单介绍
在编辑按钮下,选择插件按钮,会弹出下面弹框,里面就是UE4支持的插件类型。
这里记录下三个比较有用的插件用途:
Blank-原始的插件,只提供最基础的目录与文件创建,可以是任何内容插件。
Content Ony-只能在Content目录的插件,通常是给美术资源之类做的插件。
Blueprint Library-蓝图库,如其名,就是一些比较独立蓝图库,封装好给不同游戏用,比如A星寻路算法之类。
Editor Toolbar Button-创建一个在编辑器上面的按钮插件,创建在如下图位置。
Editor Standalone Window-独立窗体,创建一个独立界面的编辑器,通常和Slate搭配使用。
Editor Mode-创建一个在下面位置的插件
2、创建Editor Standalone Window插件
点选Editor Standalone Windo后,输入相应的插件名字、作者名字和描述,点Create Plugin,然后UE4就会自动完成创建。
3、插件的启用
勾选Enabled就可以了,需要重启,变动才会生效。
等重启完成后,就可以点击刚刚创建的按钮,测试功能。
4、插件相关文件- *.uplugin
如图所见,是一个json格式,其中定义了很多编辑器相关的内容,包括插件名字、描述版本号等,其中比较关键的是Modules定义。
"Type"-----插件类型
"Developer", 表示只在开发加载,真正打包不会加载
"Editor",表示只会在Editor模式下加载
所有枚举如下图:
enum Type
{
Runtime,
RuntimeNoCommandlet,
RuntimeAndProgram,
CookedOnly,
Developer,
Editor,
EditorNoCommandlet,
Program, //!< Program-only plugin type
ServerOnly,
ClientOnly,
// NOTE: If you add a new value, make sure to update the ToString() method below!
Max
};
&#34;LoadingPhase&#34;-----插件加载阶段
&#34;Default&#34; 这个是默认的加载阶段
模块会在不同阶段加载,这以为着有先后关系,如果加载插件发现依赖插件还没有加载,可以把加载阶段延后,根据实际情况处理。
enum Type
{
/** Loaded before the engine is fully initialized, immediately after the config system has been initialized. Necessary only for very low-level hooks */
PostConfigInit,
/** Loaded before the engine is fully initialized for modules that need to hook into the loading screen before it triggers */
PreLoadingScreen,
/** Right before the default phase */
PreDefault,
/** Loaded at the default loading point during startup (during engine init, after game modules are loaded.) */
Default,
/** Right after the default phase */
PostDefault,
/** After the engine has been initialized */
PostEngineInit,
/** Do not automatically load this module */
None,
// NOTE: If you add a new value, make sure to update the ToString() method below!
Max
};
5、插件加载时间点
Launch.cpp下有GuardedMain引擎的主入口方法
其中有FEngineLoop的PreIni和Init方法。
在PreInit方法中
可以找到加载PreLoadingScreen的地方
接着还可以找到
这里就是UE4启动后加载模块的地方。
总的来说,就是UE4引擎通过Launch.cpp的Main函数启动后,启动Loop,然后再在Loop里面对模块的加载顺序进行控制。
6、插件相关文件-*.Build.cs
这个文件通常用于编辑插件对模块的引用。
PublicDependencyModuleNames 第三方依赖可以访问
PrivateDependencyModuleNames 第三方依赖不可访问
插件假如需要引用到引擎的其他模块,需要手动添加一下依赖,良好习惯通常都是尽量Private。
7、工程文件- *. uproject
在这里通常是配置插件是否启用
文件过于简单,就不叙述了。通常在编辑器上启动或者关闭插件后,这里的参数会对应修改,也可以手动修改,但需要重启编辑器才能起效。
8、插件默认生成文件的启动流程
void *::StartupModule()
void *::ShutdownModule()
还是接上上面的加载阶段,在加载方法LoadModulesForPhase 里面,通过LoadModuleWithFailureReason来加载了模块。
接着可以看到
这里基本就介绍了默认插件的启用方法是在哪里调用了。
9、封装不需要源码的插件
bUsePrecompiled表示不需要编译,用已经编译好的插件来加载,删除CPP后,可以直接复制到其他工程使用。 |
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?立即注册
×
|