Войти
Unreal EngineФорумОбщее

Расширение возможностей редактора

Advanced: Тема повышенной сложности или важная.

#0
3:52, 30 окт. 2020

накопилось вопросов по этой теме(тоскую за юнити так сказать)
1. как в редакторе обработать нажатие клавиатуры-мыши?
2. как получить координаты курсора в координатах уровня?
3 как поменять курсор в вьюпорте редактора?


#1
(Правка: 9:26) 9:25, 30 окт. 2020

uss
Можно создать модуль в редакторной части проекта, например
class FWargameEdMode : public FEdMode

у него есть Tick
void FWargameEdMode::Tick(FEditorViewportClient* ViewportClient, float DeltaTime)

И там можно все на свете обработать. Кроме того можно создать модуль в интерфейсе
class FWargameEditorModule : public IModuleInterface

И пристроится рядом с редактированием ландшафта и сделать свои кнопочки
ue_editor | Расширение возможностей редактора

Можно еще добавлять кнопочки и прочие элементы в actor или компоненту при помощи IDetailCustomization, но это мне долго искать подробности

А вот касательно курсора я не знаю

#2
15:40, 30 окт. 2020

Osiris
тик не проблема (я нашёл два решения этой проблемы) проблема, как раз инпут ведь в едиторе нет контроллера

#3
16:53, 30 окт. 2020

uss
причем тут контроллер, он не существует в редакторе, и до контроллера ведь инпут как-то обрабатывается и только потом в него приходит

делай плагин/расширение редактора, там будет EditorMode
в нём сделаешь override MouseMove например
курсор тоже там можно поменять, видел методы когда копался в Landscape

либо сейчас как-то делают расширения для редактора на Питоне, но я не вникал, там куча инфы есть

#4
(Правка: 16:55) 16:55, 30 окт. 2020

uss
> 2. как получить координаты курсора в координатах уровня?
ну ты как бы понимаешь что 2д в 3д просто так не переводится? это будет не точка, а прямая в 3д, дальше вопрос: а в каком месте на этой прямой тебе нужно получить точку?

#5
17:04, 30 окт. 2020

mitroxa
не нужно переиначивать вопросы лучше просто кинуть ссылкой как это делается или по порядку обьяснить текстом тут что сделать чтоб решение получить

#6
(Правка: 17:15) 17:13, 30 окт. 2020

uss
> как это делается
но ты не задал ни одного конкретного вопроса, хотя тебе кажется обратное конечно

это не схемки из блюпринтов делать, тут придется глубже погрузиться самому
начни с Plugins->New(EditorPlugin)
дальше найди в редакторе инструмент который максимально соответствует твоим ожиданиям, потом найди его в исходниках UE и кури как он работает
возможно тебе вообще хватит получения выделенного актора вместо трассировки луча, откуда нам знать, это кстати прям в шаблоне есть, когда плагин создаешь

даже если тебе кто-то даст метод, который меняет курсор, откуда ты будешь его вызывать? тут такое не прокатит

#7
(Правка: 17:54) 17:23, 30 окт. 2020

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);
}
#8
18:50, 30 окт. 2020

Osiris
спс попробую

mitroxa
если тебе лень отвечать по сути можно не отвечать, никто не обидится

#9
21:09, 31 окт. 2020

может кому будет полезно:
https://forums.unrealengine.com/community/community-content-tools… nts-and-stuff
все ответы на мои вопросы есть

#10
11:59, 11 ноя. 2020

Osiris
редактор настраиваешь для броненосцев ? так-так, я за тобой слежу :)

#11
12:01, 11 ноя. 2020

innuendo

> редактор настраиваешь для броненосцев ? так-так, я за тобой слежу :)
Не, это я на старом прототипе игрался)
#12
12:06, 11 ноя. 2020
Osiris
пришлось делать хекскарту для одного проекта - так что мы тоже не хухры-мухры а очень даже огогого
Unreal EngineФорумОбщее