UE4自定义扩展插件
l 需求背景编辑器在游戏制作中是非常重要的。它可以提高效率、提供更好的可视化效果、更易于调试和提高可重用性。优质的编辑器可以提高团队生产效率并降低制作成本,从而帮助游戏开发人员更快速、更高效地创建出高质量的游戏。
本文以一个简单的美术制作需求来完整的展示在ue4下如何创建出一个完整的自定义插件。
l 开发版本
[*]UnrealEngine4 v4.22
[*]VisualStudio 2017
l 创建插件
注意!首先需确保项目有C++代码的解决方案(新建的是C++项目或者添加C++代码的普通项目)a. 如下图所示,依次点击:编辑-> Plugins-> 弹出窗口右下角的绿色New Plugin按钮 -> Editor ToolBar Button(纯按钮插件)或者Editor Standalone Window(点击按钮会弹出窗口)。
创建路径
b. 在输入插件名后,点击create plugin按钮完成插件的创建。成功后UE4会自动打开VS2017并扫描项目的目录,如下所示,Plugins文件夹已经被添加进项目
工程目录
c. 重启项目后,新建的插件会显示在工具栏处,点击即可显示如下图的提示界面。可按提示覆写**.cpp中的PluginButtonClicked()函数来丰富按钮功能
工具菜单栏
提示弹窗
l 插件结构简述
重要文件功能***.Build.cs插件中模块 ExtendedToolBarPlugin 的描述,定义了该模块的引用头文件信息,引用库信息,以及扩展依赖等。开发中可以在其中添加依赖模块,以便引用编辑器的API。***Style.cpp文件配置了图标格式,图片文件信息等。***Commands.cpp文件配置了插件在UE4编辑器中的UI实现,包括提示信息等。***.cpp文件是具体的功能实现文件,包括插件按钮点击事件,退出事件等。***.uplugin为创建插件的说明文件,包括作者、版本、类型以及加载阶段等。其中 ***.uplugin 的“Modules”的配置比较重要,一个插件可以包含多个Modules,需要配置名字、类型和加载阶段,如下图所示:
[*]Name: 将与该插件一起加载的插件模块的唯一名称。
[*]Type:设置模块的类型,有效类型有如下表所示。不同的类型决定了此插件模块适合加载的应用程序类型。插件可使用不同类型的模块组合。
Type解释Runtime在任何情况下都会加载。RuntimeNoCommandletRuntime模式但不包含命令Developer只会在 Development 运行时或者编辑器版本中才会被加载,打包( Shipping)后不加载Editor只在编辑器启动时加载EditorNoCommandletEditor模式但不包含命令Program独立的应用程序
[*]LoadingPhase:可选选项,控制在启动时加载插件的时间。需要定义这项是因为游戏模块需要依赖于该插件的Content内容,或者Content中定义的类型。
LoadingPhase解释Default在未指定 LoadingPhase 时使用PreDefault在默认阶段之前加载PostConfigInit在引擎完成关键子系统的启动之前加载
[*]WhitelistPlatforms:可选选项,提供将为其编译此模块的平台列表。若未指定,则将为所有平台编译此模块
[*]BlacklistPlatforms: 可选选项,提供将不为其编译此模块的平台列表。若未指定,则将为所有平台编译此模块
l 插件编译与移植
[*]插件代码修改后需要重新编译项目才可以生效。
[*]插件移植:创建好的插件是基于项目的。如果新建项目会丢失,此时可以将含有插件的项目的Plugins目录下的对应插件文件夹整个复制到新项目的对应位置,重新打开编辑器即可。
l 资源自动化导入插件demo
l 目标功能
[*]可以自动导入指定目录的FBX模型,并在导入过程中自动设置导入数据。例如导入模型的默认坐标、旋转角度等。本例中为自动设置导入的mesh资源的旋转角度。
[*]创建新的蓝图类资源(类似于prefab),并在代码中设置新建蓝图类的一些数据,例如旋转角度,parent class等。本例中为设置新建蓝图类的class parent为指定蓝图类。
[*]将第一步导入的mesh资源作为第二步新建蓝图类的component。
l 功能展示
[*]点击创造的插件按钮,会显示如下图的导入进度条。
[*]Content Browser会出现如下图的全新资源。
[*]新建蓝图类的Parent Class设置为指定的蓝图类。
[*]新建蓝图类已添加指定的component。
[*]导入的mesh资源的旋转角度已自动修改,并屏蔽自动弹出的导入设置界面。
l 实现过程
[*]按照Part1的步骤创建plugin,本例插件的名称为loadingpluginTest1
[*]在loadingpluginTest1.cpp文件内的 -> FloadingpluginTest1Module::PluginButtonClicked()函数内添加代码来实现目标功能,如下图所示。
l 部分实现代码
[*]创建新的蓝图类(类似于prefab),并指定父类:
[*]资源导入并设置
[*]添加component
lC++ API
Unreal engine C++ API
l辅助学习资料
[*]Unreal engine AnswserHub
[*]Unreal engine YouTube Channel
写的太好了,不愧是仙女[赞同] 写的太好了,不愧是仙女[赞同]
页:
[1]