@author: 白袍小道
随缘查看
前言:
这里接着上文来说,编辑器的另外一条------编辑器模式。(若需要查看引擎层该部分过程,可以迁移到Unreal搬山)

正文:
1、实现图

a)说明
| BaiPaoXDEditorCheck_EditorMode |
模块 主要方法: StartupModule: 可以在这里将模式注册 +FEditorModeRegistry::Get().RegisterMode
ShutdownModule: 可以在这里将模式注销 +FEditorModeRegistry::Get().UnregisterMode |
| BaiPaoXDEditorCheck_EditorModeEdMode |
模块模式 主要方法: virtual void Enter() override; //进入【例子中可以在这里构造工具且启动 virtual void Exit() override; //退出
virtual void Tick(FEditorViewportClient* ViewportClient, float DeltaTime) override
virtual void Render(const FSceneView* View, FViewport* Viewport, FPrimitiveDrawInterface* PDI) override;
virtual void ActorSelectionChangeNotify() override; |
| BaiPaoXDEditorCheck_EditorModeEdModeToolkit |
模式工具,基本上可以在这里做事情,当然也可以做多个 主要方法: /** FModeToolkit interface */ virtual void Init(const TSharedPtr<IToolkitHost>& InitToolkitHost) override;
/** IToolkit interface */ virtual FName GetToolkitFName() const override; virtual FText GetBaseToolkitName() const override; virtual class FEdMode* GetEditorMode() const override; virtual TSharedPtr<class SWidget> GetInlineContent() const override { return ToolkitWidget; }
属性 TSharedPtr<SWidget> ToolkitWidget; |
主要实现部分:

2、需求和实现
可以对选中的Actor 整体位置做随机偏移[范围定义],并能撤销
第一步:布局和结构

SVerticalBox::Slot() : 竖排

AutoHeight:自动匹配高度
HALign:横向布局, VAlign:纵向。
Padding(50):分割
Locals::MakeButton: 一个返回SButton的自定义方法,
第二步:实现逻辑


注意一下:.IsEnabled_Static(&Locals::IsWidgetEnabled)【可以是否灰掉】
