UE4的Config系统使用起来很方便,但是如果要让制作出来的插件/项目更方便的让其他人设置,就需要将其写到编辑器的配置列表中。

当前使用的UE4版本为4.18.0 P4。

这里的内容是以Conifg系统的使用为前提的,只是简略的记录了插件制作过程中,将Conifg注入到编辑器界面的过程。

UDeveloperSettings

让配置类继承自UDeveloperSettings是最简单的配置实现方式。

不过在测试和使用的过程中遇到过很多次无法增量编译编辑器的情况,需要对项目进行重新生成。

目前还不是很确定问题是出在UDeveloperSettings这边还是由于4.18的预览bug引起的。

类似于这样的定义就可以让配置出现在项目配置中

UCLASS(config = ElLog, defaultconfig, meta = (DisplayName = "ElLog"))

class UElLogSettings : public UDeveloperSettings

不过这样的方式有一个缺点,那就是他只能出现在配置的“引擎”分类中,并没有看到能够调整目录的地方。

ISettingsModule

其实UE4本身有提供配置的注册接口,只要通过这个接口就能将配置类注册到设定UI中去了:

void RegisterSettings()

{

UE_LOG(LogTemp,Log,TEXT("[NS_ELLOG] RegisterSettings()"));

if (ISettingsModule* SettingsModule = FModuleManager::GetModulePtr("Settings"))

{

SettingsModule->RegisterSettings("Project", "Plugins", "ELLog",

LOCTEXT("TileSetEditorSettingsName", "EasyLog Settings"),

LOCTEXT("TileSetEditorSettingsDescription", "Configure the setting of easylog plugin."),

GetMutableDefault());

UE_LOG(LogTemp, Log, TEXT("[NS_ELLOG] RegisterSettings(): Stp"));

}

}

void UnregisterSettings()

{

if (ISettingsModule* SettingsModule = FModuleManager::GetModulePtr("Settings"))

{

SettingsModule->UnregisterSettings("Project", "Plugins", "ELLog");

}

}

由于这里使用的时候是在插件中,直接在StartupModule()和ShutdownModule()中进行注册和解注册就可以了。

注意这里的配置是会覆盖的,如果使用了引擎内部相同的配置名称可能会发生奇怪的现象。

RegisterSettings函数中的各个参数的意义都比较明显,直接看注释就能明白了。

* @param ContainerName 配置的分类,目前只有Editor和Project两个,分别对应编辑器设置和项目设置两个界面

* @param CategoryName 配置的目录,这个是在上面两种界面中的目录,比如引擎、游戏等。

* @param SectionName 配置的名称,就是显示在左侧目录树上的名称

* @param DisplayName 配置的显示名称

* @param Description 配置的描述

* @param SettingsObject 实际承载这个配置的配置类

* @return 会返回注册后的配置展示类,失败的话会返回Nullptr

上面的代码注册后就能在项目设置中看到了

需要注意的是,ISettingModule这个类型是编辑器使用的,在Shipping模式下无法使用,所以在相关的代码附近注意加上WITH_EDITOR的宏来进行差分。

通常情况下这样就可以了,不过由于插件的类型原因,这里还是有一个问题。

Loading Phase

UE4中的模块都有载入时机的概念,在uplugin文件中可以进行配置。

目前可用的载入时机有

PostConfigInit:引擎初始化阶段,在配置系统初始化完成后

PreLoadingScreen:引擎初始化阶段,可以在这里挂入LoadingScreen的注册

PreDefault:引擎初始化阶段,在Default阶段之前

Default:引擎初始化阶段,此时所有的游戏模块加载已经完成

PostDefault:引擎初始化阶段,在Default阶段之后

PostEngineInit:引擎初始化完成后

None:不会自动加载

这几个加载阶段有的在文档中描述不是很明确,由于没有实际使用到,所以就没有深入看过。当遇到相应需求的时候,再进行判断比较合适。

这里由于ELLog本身是Log的插件,所以为了尽可能早的加载完成,就选择了PostConfigInit阶段。

但是在这个阶段,SettingModule其实并没有完成加载,所以无法成功完成注入到配置系统中的工作。

因此需要借助额外的引擎接口才行

//NS_ELLOG::RegisterSettings();

FCoreDelegates::OnFEngineLoopInitComplete.AddStatic(&NS_ELLOG::RegisterSettings);

在StartupModule()中不直接进行注册,而是注册到引擎初始化完成的Delegate上,这样就可以在SettingModule加载完成之后执行注册了。

以上的代码都可以在ELLog插件中找到,因此这里就不多贴代码了。

如有转载,请注明出处。

ue4 设置intellisence_UE4的配置界面写入相关推荐

  1. ue4 设置intellisence_UE4.22编辑器界面操控设置(4)

    视频课程地址:https://i.youku.com/i/UMzE2NDk2OTIw/custom?spm=a2hzp.8244740.0.0&id=32318 -在场景中按住鼠标左键上下移动 ...

  2. android编程获取网络和wifi状态及调用网络设置界面,Android编程获取网络连接状态(3G/Wifi)及调用网络配置界面 - Android平台开发技术 - 博客园...

    获取网络连接状态 随着3G和Wifi的推广,越来越多的Android应用程序需要调用网络资源,检测网络连接状态也就成为网络应用程序所必备的功能. Android平台提供了ConnectivityMan ...

  3. Android编程获取网络连接状态及调用网络配置界面

    获取网络连接状态 随着3G和Wifi的推广,越来越多的Android应用程序需要调用网络资源,检测网络连接状态也就成为网络应用程序所必备的功能. Android平台提供了ConnectivityMan ...

  4. 【Android 安全】使用 360 加固宝加固应用 ( 购买高级加固服务 | 设置资源加固 | 设置 SO 文件保护配置 | 设置 SO 防盗用文件配置 | 反编译验证加固效果 )

    文章目录 一. 购买加固服务 二. 设置资源加固 三. 设置 SO 文件保护配置 四. 设置 SO 防盗用文件配置 五. 反编译验证加固效果 本博客用于记录下 360 加固保 加固应用流程 ; ( 上 ...

  5. Android编程获取网络连接状态(3G/Wifi)及调用网络配置界面

    http://www.mobiletuts.me 获取网络连接状态 随着3G和Wifi的推广,越来越多的Android应用程序需要调用网络资源,检测网络连接状态也就成为网络应用程序所必备的功能. An ...

  6. Android的配置界面PreferenceActivity

    我想大家对于android的系统配置界面应该不会陌生吧,即便陌生,那么下面的界面应该似曾相识吧,假若还是不认识,那么也没有关系,我们这一节主要就是介绍并讲解android 中系统配置界面的使用,相信大 ...

  7. luci编程 openwrt_openwrt开源系统LUCI配置界面

    转自:http://www.right.com.cn/forum/thread-131035-1-1.html 本人菜鸟,最近在学习这方面的知识,在参考资料的基础上总结如下内容. 这篇文章针对如何对o ...

  8. linux帆软内存设置,修改FineReport配置参数

    堆外内存由-XX:MaxDirectMemorySize这个参数来设置,建议最多使用内存不超过 4GB . 注:MaxDirectMemorySize 最少为 2GB . 5.1 直接部署修改参数 1 ...

  9. Android编程 获取网络连接状态 及调用网络配置界面

    获取网络连接状态 随着3G和Wifi的推广,越来越多的Android应用程序需要调用网络资源,检测网络连接状态也就成为网络应用程序所必备的功能. Android平台提供了ConnectivityMan ...

最新文章

  1. Windows service无法删除怎么办?
  2. 使用Zabbix监控ZooKeeper服务的健康状态
  3. BASIC-11 十六进制转十进制
  4. 字节跳动招聘【三维视觉】算法实习生
  5. 培养女人味的12条妙方
  6. 正则匹配身份证和邮箱
  7. 《Java程序员职场全攻略:从小工到专家》连载十:这条路大家都是怎么走的
  8. linux自动加密软件开发,【天锐绿盾加密软件支持Linux_信息安全管理系统_文件自动加密_文档加密_图纸加密_网络实时监控_网络行为管理_内网安全的软件系统】免费在线试用_文档管理_选软件网...
  9. 教育平台的线上课程 智能推荐策略
  10. dell pc restore 修复计算机,dell 恢复出厂系统 修复计算机选项失效
  11. maya的颤动怎么做_为什么maya视窗跳动闪烁
  12. php 依赖倒置原则,PHP:依赖注入,控制反转,依赖倒置原则
  13. vue 基于eleui的自定义穿梭框Transfer
  14. html css js实现快递单打印_Node.js开发RPA自动抓取网页的文字内容
  15. 【计算机网络】数据链路层 : 以太网 ( 无连接、不可靠服务 | 以太网发展 | 10BASE-T 以太网 | MAC 地址 | 以太网 MAC 帧 | 高速以太网 )
  16. 【深度学习】深度学习基础-Warm_up训练策略
  17. 基于STM32的TFT-LCD触摸屏实验(HAL库)
  18. 你做的网页在哪些浏览器测试过,这些浏览器的内核分别是什么?
  19. ios 判断数字开头_iOS 正则表达式判断纯数字及匹配11位手机号码的方法
  20. 华为支付购买token的verify接口报错Token is expired or invalid

热门文章

  1. Python Mysql学习总结
  2. DefaultNetworkCredentials vs DefaultCredentials
  3. android p 游戏调节器,游戏调节器(Game Tuner)
  4. linux试密码3次则屏蔽ip,linux centos封锁多次ssh密码错误的主机IP
  5. python测试c语言代码_numpy C语言源代码调试(一)
  6. node升级命令_Vue CLI 4 发布:自动化升级过程,支持自定义包管理器
  7. 女生做产品经理好吗_谁说女生不适合做产品经理?
  8. java easyui 分页_Spring mvc+easyui做列表展示及分页
  9. ctypes python 结构体_Python 中 ctypes 的使用
  10. 感恩节活动促销海报模板,摆好借势感恩节的姿势