最近又遇到瞭個UE編輯器開發的坑,最後發現很簡單就能解決,但相關資料並不好找,隻能靠看UE代碼和揣摩,其中腦殼疼之處一言難盡。。當然這與此文無關,隻是我個人深深地感到需要寫點編輯器開發的東西,抒發一下情懷,也或許能幫到一些UE開發的仁兄們 :)
本文基於release 5.1.1開發
為瞭圖個方便,可以直接從UE中創建一個自定義編輯模式
創建出來後可以看到已經有一些基礎功能,如切換tab,創建線條
b831d31c2047da8531b8d074121fafc1
這個demo的功能還是略顯簡單,再看代碼,發現它的EdMode繼承於UEdMode
而如果看瞭UE別的編輯模式的代碼就會發現,它們大部分繼承於FEdMode父類,再仔細一看,UEdMode直接繼承於UObject,這可能相比於FEdMode靈活一點,但是如果要用到鼠標Click事件,Move事件的話則需要同時繼承別的父類,不如FEdMode把基本EdMode常用的事件函數都包圓瞭,因此本文後續還是改成基於FEdMode父類來寫。
UE5.2的PCG實在牛啊,為瞭追隨大佬的腳步,咱也幹個超級簡單的“點植被”工具吧!
因為會開源代碼,此處就不粘貼函數實現瞭
1)定義編輯模式主類
class FAntTestEdMode : public FEdMode
{
public:
const static FEditorModeID EM_AntTestEdModeId;
public:
FAntTestEdMode();
virtual void AddReferencedObjects(FReferenceCollector& Collector) override;
// FEdMode interface
virtual void Enter() override;
virtual void Exit() override;
virtual bool HandleClick(FEditorViewportClient *InViewportClient, HHitProxy *HitProxy, const FViewportClick &Click) override;
virtual bool InputKey(FEditorViewportClient *InViewportClient, FViewport *InViewport, FKey InKey, EInputEvent InEvent) override;
void RefreshDetailPanel();
UAntTestEdModeObject* UISettings;
};