#474 UE4编辑器主界面的各个Tab页   Slate     UE4     UMG     5 months ago (owner) Document
在LevelEditor.h中定义了LevelEditorTabIds类,该类每个静态属性对应一个Tab页。

 Place Actors
在PlacementModeModule.h里实现了IPlacementModeModule接口。
调用该接口的Register系列函数即可实现向Place Actors中添加自定义分类及其子项。
具体步骤如下:
  • 创建一个Editor模块,因为定制PlacementMode的行为与编辑器UI相关,设该模块名为XUI
    • XUI.build.cs文件里需要修改两处:PrivateIncludePathModuleNames与DynamicallyLoadedModuleNames均添加【PlacementMode】模块
    • XUI.build.cs文件里视具体要求添加对其他runtime模块的引用
    • 需要注意要添加的子项Actor,其代码实现中需要有XXX_API前缀
  • 修改XUI所在插件的uplugin文件:将XUI的LoadingPhase改为PostEngineInit
    • 这是因为EngineInit过程中,PlacementMode模块会初始化完毕。因此XUI在EngineInit之后加载,能保证成功获取到IPlacementModeModule接口
  • XUI里的代码实现:
    • 头文件里添加void RegisterXXXToPlacementMode()和void UnregisterXXXToPlacementMode()函数
    • cpp文件里添加一行static const FName XXXCategoryInPlacementMode("XXX");作为Category的名字
    • StartupModule()->RegisterXXXToPlacementMode(); ShutdownModule()->UnregisterXXXToPlacementMode();
    • 上面两个函数实现见代码#480

关于这方面的具体实例,可以参考插件
  • SuraControlPanel: 该插件演示了很多Slate相关的用法
    • SuraControlPanelCommonBPLibrary.h
      • 各个Tab页在UE内部的ID定义
      • 如何唤起各个Tab页
      • 编辑器SaveAll操作
      • 选中操作:选中Actor、Component、Group等操作及反选
      • 系统剪贴板的读写
      • 运行时加载CppClass和BPClass文件,返回UClass指针:LoadClass(const FString& ClassReferencePath)
      • 在一个SWidget里定位到指定的Slate控件
    • SuraControlPanel.cpp
      • 注册编辑器工具栏的启动回调:UToolMenus::RegisterStartupCallback()
      • 在UE编辑器工具栏指定位置添加菜单项和按钮等
      • 向UE注册自定义Tab页及返回系统为其分配的ID