日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

实例甜点 Unreal Engine 4迷你教程(4)之用C++实现添加子Widget到VerticalBox中以及ClearChildren...

發(fā)布時間:2023/12/20 c/c++ 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 实例甜点 Unreal Engine 4迷你教程(4)之用C++实现添加子Widget到VerticalBox中以及ClearChildren... 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

前置教程:

1. 實例甜點前面的三篇教程;

2. 最好看看筆者前面的一篇關(guān)于博文(后記:本來筆者想用C++做DragAndDrop的功能,但是失敗了,下面是藍圖實現(xiàn)的方法):

http://www.cnblogs.com/JackSamuel/p/jack975645419_0.html

?

?

重要說明:本實例是在《實例甜點?Unreal Engine 4迷你教程(1》所建立的工程LearnWidget上進行的。

第1步:我們想要創(chuàng)建兩個Widget管理者,回顧一下目前已有的WidgetMng類,它有如下成員和方法:

?

UPROPERTY()

class?UUserWidget* SlaveWidget;【我所管理的奴隸widget】

?

UFUNCTION()

void?Initialize();【我為我的slavewidget初始化

?

為了使用它們,并且擴展一些新功能,我們創(chuàng)建2WidgetMng的子類:

?

?

?

(我究竟想干啥??我希望能夠?qū)崿F(xiàn)背包系統(tǒng),就是有物品從1背包到2背包,請先看這篇博文:http://www.cnblogs.com/JackSamuel/p/jack975645419_0.html

但是摸索了一段時間之后沒有找到方法,所以本文的目的就只是用C++來為VerticalBox添加子Widget

同樣,創(chuàng)建Bag2Mng(繼承自WidgetMng)和ItemMng(繼承自WidgetMng);

?

2步:創(chuàng)建一個widget叫做Widget_Item(它作為ItemMng的奴隸Widget);

第3步:創(chuàng)建一個Widget叫做Widget_Bag1(它做誰的奴隸呢?看名字就能知道了吧)。配置如下(如果你沒有辦法通過圖片來看出怎么拼UMG,請前往學(xué)習(xí)更為基礎(chǔ)的部分):

?

第4步:創(chuàng)建一個叫做Widget_Bag2Widget,和上面的Widget_Bag1差不多就行。【后記:Bag2這個類可以不實現(xiàn),沒有找到通過C++實現(xiàn)DragAndDrop的方法】

?

5步:改一下小部件的變量名:(這一步有許多小操作,注意別飯粗心了哦)

(WidgetBag1Bag2都這樣改

?

?

第6步:創(chuàng)建藍圖子類(這一步是非常有必要的,通常C++純類很難使用,都是用BP來包裝,暴露給Editor使用的):

用上面提到的三個類繼承三個BP如下:

第7步:記得在BPHUD中調(diào)整:

保存編譯,運行效果:

可以看到,左邊和右邊分別是背包1,和背包2.

?

第8步:【重要的一步】

加入清空兒子的邏輯:

#include "Bag1Mng.h"#include "Runtime/UMG/Public/Components/VerticalBox.h"#include "Runtime/UMG/Public/Components/TextBlock.h"void ABag1Mng::Initialize(){Super::Initialize();VerticalBox = Cast<UVerticalBox>( SlaveWidget->GetWidgetFromName(TEXT("VB")) );if (VerticalBox){VerticalBox->ClearChildren();//【請注意這個函數(shù)】 }}

?

?

效果:

左側(cè)的背包1的所有兒子都被清空了;

?

9步:【本步驟企圖完成:初始化20個孩子對應(yīng)20個序號在背包1中】

修改代碼如下:

▼代碼開始 void ABag1Mng::Initialize() {Super::Initialize();VerticalBox = Cast<UVerticalBox>( SlaveWidget->GetWidgetFromName(TEXT("VB")) );if (VerticalBox){VerticalBox->ClearChildren();}for (auto i = 0; i < 20; i++){UUserWidget* NewKid = CreateWidget<UUserWidget>(GWorld->GetGameInstance(), ItemWidgetClass);VerticalBox->AddChildToVerticalBox(NewKid);if(UTextBlock* Text_ID = Cast<UTextBlock>(NewKid->GetWidgetFromName(TEXT("Text_ID"))))Text_ID->SetText(FText::AsNumber(i));} } ▲代碼結(jié)束

效果:

(重要的提示:如果讀者已經(jīng)跟丟了步驟,某些小細節(jié)沒有完全一致,那么也沒有關(guān)系,實在沒有辦法效果一致的話就只看里頭的代碼,和我的效果圖即可,主要是在UMGC++編程上有一個基本的掌握

?

?

——小江村兒的文杰 zouwj5@qq.com?20178413:57:11

?

轉(zhuǎn)載于:https://www.cnblogs.com/JackSamuel/p/7284915.html

總結(jié)

以上是生活随笔為你收集整理的实例甜点 Unreal Engine 4迷你教程(4)之用C++实现添加子Widget到VerticalBox中以及ClearChildren...的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。