накопилось вопросов по этой теме(тоскую за юнити так сказать)
1. как в редакторе обработать нажатие клавиатуры-мыши?
2. как получить координаты курсора в координатах уровня?
3 как поменять курсор в вьюпорте редактора?
uss
Можно создать модуль в редакторной части проекта, например
class FWargameEdMode : public FEdMode
у него есть Tick
void FWargameEdMode::Tick(FEditorViewportClient* ViewportClient, float DeltaTime)
И там можно все на свете обработать. Кроме того можно создать модуль в интерфейсе
class FWargameEditorModule : public IModuleInterface
И пристроится рядом с редактированием ландшафта и сделать свои кнопочки
Можно еще добавлять кнопочки и прочие элементы в actor или компоненту при помощи IDetailCustomization, но это мне долго искать подробности
А вот касательно курсора я не знаю
Osiris
тик не проблема (я нашёл два решения этой проблемы) проблема, как раз инпут ведь в едиторе нет контроллера
uss
причем тут контроллер, он не существует в редакторе, и до контроллера ведь инпут как-то обрабатывается и только потом в него приходит
делай плагин/расширение редактора, там будет EditorMode
в нём сделаешь override MouseMove например
курсор тоже там можно поменять, видел методы когда копался в Landscape
либо сейчас как-то делают расширения для редактора на Питоне, но я не вникал, там куча инфы есть
uss
> 2. как получить координаты курсора в координатах уровня?
ну ты как бы понимаешь что 2д в 3д просто так не переводится? это будет не точка, а прямая в 3д, дальше вопрос: а в каком месте на этой прямой тебе нужно получить точку?
mitroxa
не нужно переиначивать вопросы лучше просто кинуть ссылкой как это делается или по порядку обьяснить текстом тут что сделать чтоб решение получить
uss
> как это делается
но ты не задал ни одного конкретного вопроса, хотя тебе кажется обратное конечно
это не схемки из блюпринтов делать, тут придется глубже погрузиться самому
начни с Plugins->New(EditorPlugin)
дальше найди в редакторе инструмент который максимально соответствует твоим ожиданиям, потом найди его в исходниках UE и кури как он работает
возможно тебе вообще хватит получения выделенного актора вместо трассировки луча, откуда нам знать, это кстати прям в шаблоне есть, когда плагин создаешь
даже если тебе кто-то даст метод, который меняет курсор, откуда ты будешь его вызывать? тут такое не прокатит
uss
class FWargameEdMode : public FEdMode { public: UWargameEditorObject* UISettings; const static FEditorModeID EM_WargameEdModeId; /* Constructor */ FWargameEdMode(); /* Destructor */ virtual ~FWargameEdMode( ); /** FGCObject interface */ virtual void AddReferencedObjects( FReferenceCollector& Collector) override; virtual bool MouseEnter( FEditorViewportClient* ViewportClient, FViewport* Viewport, int32 x, int32 y) override; virtual bool MouseLeave( FEditorViewportClient* ViewportClient, FViewport* Viewport) override; virtual bool MouseMove( FEditorViewportClient* ViewportClient, FViewport* Viewport, int32 x, int32 y) override; // FEdMode interface virtual void Enter( ) override; virtual void Exit( ) override; virtual void Tick( FEditorViewportClient* ViewportClient, float DeltaTime) override; } bool FWargameEdMode::MouseMove( FEditorViewportClient* InViewportClient, FViewport* InViewport, int32 x, int32 y) { FSceneViewFamilyContext ViewFamily( FSceneViewFamily::ConstructionValues( InViewportClient->Viewport, InViewportClient->GetScene( ), InViewportClient->EngineShowFlags) .SetRealtimeUpdate( InViewportClient->IsRealtime( ))); FSceneView* View = InViewportClient->CalcSceneView( &ViewFamily); FViewportCursorLocation MouseViewportRay( View, InViewportClient, InViewport->GetMouseX( ), InViewport->GetMouseY( )); return FEdMode::MouseMove( InViewportClient, InViewport, x, y); }
Osiris
спс попробую
mitroxa
если тебе лень отвечать по сути можно не отвечать, никто не обидится
может кому будет полезно:
https://forums.unrealengine.com/community/community-content-tools… nts-and-stuff
все ответы на мои вопросы есть
Osiris
редактор настраиваешь для броненосцев ? так-так, я за тобой слежу :)
innuendo
> редактор настраиваешь для броненосцев ? так-так, я за тобой слежу :)
Не, это я на старом прототипе игрался)
Osiris
пришлось делать хекскарту для одного проекта - так что мы тоже не хухры-мухры а очень даже огогого
Тема в архиве.