700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > [UE4入门笔记(4)] 10.自定义Button控件 11.如何输出Debug信息 12.实现游戏设置控件

[UE4入门笔记(4)] 10.自定义Button控件 11.如何输出Debug信息 12.实现游戏设置控件

时间:2023-04-19 06:45:39

相关推荐

[UE4入门笔记(4)] 10.自定义Button控件 11.如何输出Debug信息 12.实现游戏设置控件

目录

前言: 本篇学习内容:10.自定义Button控件11.如何输出Debug信息12.实现游戏设置控件

前言:

笔者目前在校本科大三,目标方向是人工智能、计算机视觉。上一个OpenCV学习笔记专栏已完结,在学习完OpenCV后,我继续学习C++,并用纯C++做UE4项目的方式继续提升自己的水平。

梁迪老师的水平非常高,他的课程本来也无需笔记:课程本身即为最好的笔记。但由于我天赋有限,还是边看边记,以防遗忘——知识点太多,步骤太繁杂了。在学习过程中,我也偶有思考,思索为什么某个方法老师要这样做。所以,一是为了记录,二是为了分享,才有了这个专栏。

内容方面,由于我在开启这个专栏时,此项目已经做完很多了。所以,前期的一些大篇幅叙述的知识,可能在后期应用中一带而过。以及,前期的一些知识,后期会重新剖析,并加上我的个人理解。

另外,若有学术交流/学业交流意愿,可以邮件联系1246210283@,希望一齐进步。

本篇学习内容:

10.自定义Button控件

11.如何输出Debug信息

12.实现游戏设置控件

10.自定义Button控件

(1)UE4有SButton,我们没有用UE4自带的SButton,而是自己写了一个自己的Button控件,即自定义SButton控件

(2) 这个控件从属于MenuWidget的Childslot,在SAssignNew(ContentBox,SVerticalBox)下添加了SSlAiMenuItemWidget

ContentBox->AddSlot()[SNew(SSlAiMenuItemWidget) //这样写等同于在SAssignNew(ContentBox,SVerticalBox)下面 +SVerticalBox::Slot()[SNew(SSlAiMenuItemWidget)].ItemText(NSLOCTEXT("SlAiMenu","StartGame","StartGame")) .ItemType(EMenuItem::StartGame)//这两个属性在MenuItemWidget.h中添加属性后,就可以在这里设置了.Onclicked(this,&SSlAiMenuWidget::MenuItemOnclicked)];

(3) 我们在MenuItemWidget文件中设置了属性,所以就可以在添加的SSlAiMenuItemWidget设置其属性。

(4) 随后,我们自定义了一个委托(该委托在SButton中是自带的),绑定了我们自定义的Onclicked函数。

UE4提供了很多声明委托的模板,包括1参数-5参数等等

声明委托之后,在下面添加SLATE_EVENT(FItemClicked,Onclicked),随后在MenuWidget中声明一个函数

void MenuItemOnclicked(EMenuItem::Type ItemType);

这个函数的参数对应const EMenuItem::Type

然后去MenuWidget的childslot下的MenuItemWidget下就可以绑定Onclicked到SSlAiMenuWidget::MenuItemOnclicked

(5)为了顺利触发Onclicked,我们重写了部分鼠标事件。在SButton中,重写了更多的鼠标事件。在我们自定义的这个控件中,只重写了3个。

(6) 除此之外,在按钮按下时,按钮颜色会改变,这一部分通过SImage绑定ColorAndOpacity(this,&SSlAiMenuItemWidget::GetTintColor)来实现。

(7) 随后实现GetTintColor函数。

11.如何输出Debug信息

准备一个空类,在里面声明命名空间并实现Debug函数即可

#include "Engine/World.h"#include "Engine/GameEngine.h"namespace SlAiHelper{FORCEINLINE void Debug(FString Message, float Duration = 3.f) {if (GEngine) {GEngine->AddOnScreenDebugMessage(-1, Duration, FColor::Yellow, Message); //打印一段黄色的文字,持续Duration时间}}}

12.实现游戏设置控件

(1)按照惯例先获取Menu样式

(2)游戏设置界面有三行内容,所以采用SVerticalBox

(3)ChildSlot层级:先用SBox定好窗口大小,然后添加背景图片,然后添加SOverlay,在SOverlay下面 添加SVerticalBox,然后添加3个+SVerticalBox::Slot()

(4)第一行是中英文选项,以2个CheckBox实现,在CheckBox后面跟着文字,这个文字用STextBlock实 现。

由于SCheckBox动态变化,所以需要创建指针。

随后将CheckBox绑定函数,用自带的OnCheckStateChanged委托。

我们最好是统一设置样式。在设置样式时,要添加6个样式。这对应蓝图中CheckBox的Style里 的6个选项。(在SlAiMenuWidgetStyle中添加笔刷)

(5)第二行是音量调节,以一个Text、一个SizeBox、一个Text显示百分比构成。

(6)第三行是音效调节,和第二行结构相同。

注意,音量和音效要根据上一次关闭游戏时设置的值来进行初始化。所以这两个值保存在DataHandle中。

(7)此外,为了以后能在别的控件中调用修改音量、音效、语言的函数,我们定义了两个委托(在 GameOptionWidget中)并在.cpp文件中获取委托。

然后在.cpp的Childslot中绑定的函数的实现里,把原本的代码改为调用委托。

再在MenuWidget中定义修改语言、音效、音量的函数,函数的实现代码就是被改为调用委托 的函数的原本代码。

再在MenuWidget的.cpp文件中的Childslot创建类时就绑定这两个委托。

[UE4入门笔记(4)] 10.自定义Button控件 11.如何输出Debug信息 12.实现游戏设置控件 --梁迪老师UE4纯C++Slate开发沙盒游戏

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。