max复制关键帧到不同的文件_虚幻4笔记-插件创建、相关配置文件和加载启动源码分析...

先记录一下UE4插件一些基础知识。

1、插件创建面板简单介绍

在编辑按钮下,选择插件按钮,会弹出下面弹框,里面就是UE4支持的插件类型。

c49eb3435b6d58944f06a05e033c57f8.png

这里记录下三个比较有用的插件用途:

Blank-原始的插件,只提供最基础的目录与文件创建,可以是任何内容插件。

Content Ony-只能在Content目录的插件,通常是给美术资源之类做的插件。

Blueprint Library-蓝图库,如其名,就是一些比较独立蓝图库,封装好给不同游戏用,比如A星寻路算法之类。

Editor Toolbar Button-创建一个在编辑器上面的按钮插件,创建在如下图位置。

74b6a61d9f706b75752dbcce8bd35d10.png

Editor Standalone Window-独立窗体,创建一个独立界面的编辑器,通常和Slate搭配使用。

Editor Mode-创建一个在下面位置的插件

af2772dd72718a47d7ffaa918a9d74db.png

2、创建Editor Standalone Window插件

点选Editor Standalone Windo后,输入相应的插件名字、作者名字和描述,点Create Plugin,然后UE4就会自动完成创建。

bd922f5d9ed8e97ad8bf24ae04a3338d.png

3、插件的启用

勾选Enabled就可以了,需要重启,变动才会生效。

7f219e701c0517462a6e72f1ee481892.png

等重启完成后,就可以点击刚刚创建的按钮,测试功能。

af6acbb54fc750bd22f23c7ace96787e.png

4、插件相关文件- *.uplugin

6ab5cef8473ea37048f11dc14f4077bf.png

如图所见,是一个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

};

"LoadingPhase"-----插件加载阶段

"Default" 这个是默认的加载阶段

模块会在不同阶段加载,这以为着有先后关系,如果加载插件发现依赖插件还没有加载,可以把加载阶段延后,根据实际情况处理。

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引擎的主入口方法

9426056de7154aef1ce184185eaccced.png

其中有FEngineLoop的PreIni和Init方法。

4c2dbb8454ff0f222a07809268bb92b1.png

505c6c9fb1f4db1f35f56f3686679043.png

在PreInit方法中

可以找到加载PreLoadingScreen的地方

4051688f522f834c11e1c84742ecc4e8.png

接着还可以找到

3dca32f07ee538882b9b694c7edbfe1c.png

ae279f54244943ff50928220ef356aba.png

这里就是UE4启动后加载模块的地方。

总的来说,就是UE4引擎通过Launch.cpp的Main函数启动后,启动Loop,然后再在Loop里面对模块的加载顺序进行控制。

6、插件相关文件-*.Build.cs

这个文件通常用于编辑插件对模块的引用。

0f6eac6c3d02d27cf5d13899d0458262.png

PublicDependencyModuleNames 第三方依赖可以访问

PrivateDependencyModuleNames 第三方依赖不可访问

插件假如需要引用到引擎的其他模块,需要手动添加一下依赖,良好习惯通常都是尽量Private。

009b7663e5c641d8e04e10e81dcbaa42.png

7、工程文件- *. uproject

在这里通常是配置插件是否启用

a17ba6e64110b1a22af2aa0be52d2a3d.png

文件过于简单,就不叙述了。通常在编辑器上启动或者关闭插件后,这里的参数会对应修改,也可以手动修改,但需要重启编辑器才能起效。

8、插件默认生成文件的启动流程

void *::StartupModule()

void *::ShutdownModule()

还是接上上面的加载阶段,在加载方法LoadModulesForPhase 里面,通过LoadModuleWithFailureReason来加载了模块。

90a74a74ca6b6b92cebe98ba2c75c978.png

接着可以看到

5a56bf547b523e07fc838ee41dd29c9e.png

这里基本就介绍了默认插件的启用方法是在哪里调用了。

9、封装不需要源码的插件

7109f7f077085aaea8411f3c06d93928.png

bUsePrecompiled表示不需要编译,用已经编译好的插件来加载,删除CPP后,可以直接复制到其他工程使用。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值