找回密码
 立即注册
查看: 472|回复: 2

UE4自定义扩展插件

[复制链接]
发表于 2023-2-28 13:26 | 显示全部楼层 |阅读模式
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


l  C++ API
Unreal engine C++ API
l  辅助学习资料

  • Unreal engine AnswserHub
  • Unreal engine YouTube Channel

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

×
发表于 2023-2-28 13:31 | 显示全部楼层
写的太好了,不愧是仙女[赞同]
发表于 2023-2-28 13:39 | 显示全部楼层
写的太好了,不愧是仙女[赞同]
懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Unity开发者联盟 ( 粤ICP备20003399号 )

GMT+8, 2024-12-22 10:32 , Processed in 0.092135 second(s), 26 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表