Unreal Engine 4 http://uengine.ru/forum/ |
|
Текстовые строки на луте. http://uengine.ru/forum/viewtopic.php?f=19&t=12156 |
Страница 1 из 1 |
Автор: | RepkaGaming [ 17 ноя 2017, 00:00 ] |
Заголовок сообщения: | Текстовые строки на луте. |
Здравствуйте товарищи, дело такое, я небольшую рпг решил своять, а в любой рпг игре как известно есть лут. С самим лутом у меня проблем вроде нету, запилил свой класс для вещей ан основе AActor, прикрепил туда статикмеш, дропается, берется, мышкой наводишь подсвечивается. Хотелось бы еще добавить и текст с названием при наведении, по типу как в Дъябло, что бы строка, с бэкграундом. Подскажите пожалуйста варианты реализации, я честно сказать с UE4 только начал знакомиться и пока все что мне пришло в голову это приатачить к этому самому мешу виджет. Хотелось бы услышать экспертное мнение по этому поводу, стоит ли так делать вообще и какие есть альтернативы. И еще хотелось бы узнать как эти виджеты кодить? |
Автор: | RepkaGaming [ 17 ноя 2017, 08:56 ] |
Заголовок сообщения: | |
я вообщем добавил виджет к актору и вот что получилось, одни виджеты перекрывают другие в то время кук в Дьябло скажем или в паф оф эекзайл все эти названия компонуется рядом друг с другом вот по поводу подобной реализации вопрос, это мне получается надо спаунить виджет не на предмете а на точке рядом с предметом, потом значиит как то проверять не перекрывает ли он другой виджет и двигать их? я не очень понимаю какие инструменты для этого использовать, есть какие нибудь идеи? |
Автор: | RepkaGaming [ 17 ноя 2017, 12:50 ] |
Заголовок сообщения: | |
и как сделать поправку на угол обзора? можно ли вообще выводить виджеты на экране? так что бы их положение основывалось на объектах из мира которые попадают в обзор камеры? |
Автор: | RepkaGaming [ 17 ноя 2017, 13:15 ] |
Заголовок сообщения: | |
И еще один вопрос по поводу подсветки предметов, как вы знаете обычно есть кнопка которая включает / отключает подсветку предметов и тут я подумал а как же мне это реализовать? Если я отправлю вообще всем объектам класса предмет экзекьют через актор инетатор, это же неправильный подход? Не работает так если объектов в мире много? Вот и хотелось бы узнать, как мне повесить экзекьют на каждый объект который рендерится по ходу отправлять и как мне вообще узнать какие объекты в обзоре камеры на данный момент находятся? |
Автор: | Snake [ 02 дек 2017, 17:52 ] |
Заголовок сообщения: | Re: |
вобще поиск свободного места виджета во вьювпорте для отображения, чтоб виджеты не накладывались или пересекались - это хороший вопрос , ответ мне тоже был бы интересен... и если кого найдется какая инфа по этому было б хорошо чет почитать. потому что я себе представляю слишком сложную конструкцию с расчетом 2д физики, должен быть способ проще по идее. по поводу обзора камеры, проще всего создать компонент, который будет проверять-мерять владельца, доступ к камере есть, параметры камеры известны и математика елементарная. в итоге получаем булевую из такого компонента: в обзоре камеры обьект или нет, и по ней что надо вызываем уже в самом обьекте. другого простого способа пока не нашел. |
Автор: | RepkaGaming [ 03 дек 2017, 05:26 ] |
Заголовок сообщения: | Re: Re: |
Snake писал(а): вобще поиск свободного места виджета во вьювпорте для отображения, чтоб виджеты не накладывались или пересекались - это хороший вопрос , ответ мне тоже был бы интересен... и если кого найдется какая инфа по этому было б хорошо чет почитать. потому что я себе представляю слишком сложную конструкцию с расчетом 2д физики, должен быть способ проще по идее. по поводу обзора камеры, проще всего создать компонент, который будет проверять-мерять владельца, доступ к камере есть, параметры камеры известны и математика елементарная. в итоге получаем булевую из такого компонента: в обзоре камеры обьект или нет, и по ней что надо вызываем уже в самом обьекте. другого простого способа пока не нашел. Да я уже разобрался с камерами, там есть такая фишка итератор всех акторов в мире, а уже в акторе есть булька которая говорит видно актор или нет, а вот с поиск свободного места во въюпорте я так и не решил вопрос, но я так сказать и не заморчивался пока, столкнулся с другим сейчас по теме моментом, делаю драг н дроп инвентарь как в дъябле и столкнулся с проблемой вот есть у меня драг энд дроп виджет короче. Вот он собственно Код: #include "Image.h" #include "Base.h" #include "ItemIcon.generated.h" UCLASS() class SARAFAN_API UItemIcon : public UUserWidget {GENERATED_BODY() public: virtual void NativeConstruct() override; virtual TSharedRef<SWidget> RebuildWidget(); // Variables protected: UTexture2D* Image; UImage* ItemIcon; TMap<FVector2D, UImage*> IconSlots; TMap <FVector2D, ELights> IconLight; TArray<FLinearColor> LightArray = { { 0.0f, 0.0f, 0.0f, 0.0f }, { 0.0f, 1.0f, 0.0f, 0.33f }, { 1.0f, 1.0f, 0.0f, 0.33f }, { 1.0f, 1.0f, 0.0f, 0.33f } }; int SlotsX; int SlotsY; // Functions public: void SetItemSizeAndImage(int sizex, int sizey, UTexture2D *image); }; Код: #include "ItemIcon.h" #include "Base.h" void UItemIcon::NativeConstruct() { Super::NativeConstruct(); } TSharedRef<SWidget> UItemIcon::RebuildWidget() { UPanelWidget* RootWidget = Cast<UPanelWidget>(GetRootWidget()); if (!RootWidget) { RootWidget = WidgetTree->ConstructWidget<UCanvasPanel>(UCanvasPanel::StaticClass(), (TEXT("Root"))); UCanvasPanelSlot *RootWidgetSlot = Cast<UCanvasPanelSlot>(RootWidget->Slot); WidgetTree->RootWidget = RootWidget; RootWidget->SetVisibility(ESlateVisibility::HitTestInvisible); } TSharedRef<SWidget> Widget = Super::RebuildWidget(); if (RootWidget && WidgetTree) { ItemIcon = WidgetTree->ConstructWidget<UImage>(UImage::StaticClass(), (TEXT("Item Icon")));; RootWidget->AddChild(ItemIcon); UCanvasPanelSlot *ItemIconSlot = Cast<UCanvasPanelSlot>(ItemIcon->Slot); if (Image) { ItemIcon->SetBrushFromTexture(Image); } ItemIconSlot->SetSize(FVector2D(slotsize * SlotsX, slotsize * SlotsY)); ItemIconSlot->SetZOrder(1); for (int y = 0; y < SlotsY; y++) { for (int x = 0; x < SlotsX; x++) { IconSlots.Add(FVector2D(x, y), WidgetTree->ConstructWidget<UImage>(UImage::StaticClass(), (TEXT("Icon Slot")))); UImage* IconSlot = IconSlots[FVector2D(x, y)]; IconSlot->SetColorAndOpacity(FLinearColor(0.f, 0.f, 0.f, 0.3f)); RootWidget->AddChild(IconSlot); UCanvasPanelSlot *IconSlotSlot = Cast<UCanvasPanelSlot>(IconSlot->Slot); IconSlotSlot->SetSize(FVector2D(slotsize, slotsize)); IconSlotSlot->SetPosition(FVector2D(x * slotsize, y * slotsize)); IconSlotSlot->SetZOrder(0); } } } return Widget; } void UItemIcon::SetItemSizeAndImage(int sizex, int sizey, UTexture2D *image) { SlotsX = sizex; SlotsY = sizey; Image = image; RebuildWidget(); это простенький виджет, я его собственно говоря создаю когда предмет поднимается, разрушаю когда предмет выкидывается, а с момента как он создан через фрейм тик я его перемещаю к координатам курсора, в теории у меня есть картинка на первом плане это картинка предмета, ячейки на заднем которые создаются и должны менять свет когда попадают на ячейки инвентаря, то есть скажем 2x6 предмет у меня и правый угол заезжает на ячейку инвентаря и если она пустая, то виджет ячейки на заднем фоне этого драга должен менять цвет на зеленый, если ячейка занята, то на красный и вот в чем проблема, я совершенно не понимаю как мне отслеживать эти моменты? я нашел там параметр геометрии в виджете, я так понимаю эта геометрия записывается во вьюпорте, только вот как с этим работать я пока не разобрался, пытался почитать на сайте уе, но пока честно сказать ничего не понял. |
Страница 1 из 1 | Часовой пояс: UTC + 3 часа |
Powered by phpBB® Forum Software © phpBB Group https://www.phpbb.com/ |