自学内容网 自学内容网

UE4_用户控件_2_按钮的动态效果

效果展示:

操作步骤:

 1、新建一个触发Actor,更名为BP_EventTrigger。

这个蓝图类可以拖拽到场景中好多次,生成好多实例。但是我希望每次触发创建的用户控件都是不同的。添加Capsule Collision。

修改胶囊体半高和半径都为156

BP_EventTrigger事件图表中添加“事件Actor开始重叠”事件。

添加一个布尔变量display,编译,设置默认值为true。

2、新建个角色类,只用于行走,不需要骨骼网格体。

让角色具有行动能力

因为我们创建的角色不具备控制行走的事件,同时添加一个变量HUDActive控制是否具有行动能力。

这儿的事件还是使用的第三人称角色中的输入:

删除场景中默认的角色,测试下:

现在能够正常控制角色了。

3、新建个GameMode,并把默认pawn类设置为新建角色BP_My_Character。

4、世界场景设置,选择上面的gamemode。

5、、新建个拥有退出按钮的用户控件UMG_Exit,角色蓝图的“事件开始运行”创建用户控件UMG_Exit。

设置按钮的锚点和位置,如下图:

在按钮上添加个文字Exit,修改颜色为黑色,效果如下图:

角色中事件开始运行的时候把它创建出来,并在角色中创建个用户控件变量,来保存它。

6、角色中还需要加一个BP_EventTrigger类型的变量。

特别是当场景中有好几个BP_EventTrigger类型的话,可以让它们与角色重叠时创建不同的用户控件,这个变量是用于决定哪个实例触发它的。

7、角色中还得添加一个用户控件类的引用的变量affectUMG。

好知道我要创建的用户控件到底是哪一个用户控件类的实例

这个值也是从BP_EventTrigger蓝图类中得到的。

9、编辑下BP_EventTrigger蓝图类,当重叠的时候,我们把自己传递给角色的BP_EventTrigger类型的变量currentbutton。

 新建一个布尔变量Isactive,用于判断是否被激活,

默认是没激活的,当没被激活的时候,我们需要把要显示的控件类传递给角色的变量affectUMG

同时还得设置一个变量值赋予角色的affectUMG变量,新建个公开的变量赋值与它

10、现在用户控件还没有,我们没办法给公开的变量affectUM赋值,来新建个用户控件,更名为UMG_Button

双击打开,拖拽图像到画布,并设置锚点及其它数据

效果如下图:

在里面添加个画布面板,参数设置

效果如图:

添加个文本框,,设置位置及大小,添加文字

效果如下图:

我们需要文字实现换行:

换行效果如下;

 再添加个垂直框,垂直框是一个布局面板,允许子控件自动垂直布局。

设置好锚点、位置和大小

拖拽个文本放到垂直框中

设置文本如下图:

添加个间隔区

添加个文本,如下图:

添加个间隔区,再添加个文本,效果如下图:

在再垂直框的同一阶层添加个按钮,参数设置如下:

按钮上需要添加个文字:

11、现在来设置用户控件的事件图表:

(1)首先我们要理解按钮实现的是两个控件(文本和垂直框)的显示切换,我们需要对可视性进行绑定,当已启用时可视。

(2)先创建个布尔变量textvis,用于设置此控件能否被用户交互修改。默认为false。

让文本的已启用与布尔变量textvis进行绑定。

已启用是用于设置此控件能否被用户交互修改。

(3)然后对可视性绑定函数并更名为textvisible。

(4)我们现在来编辑可视性的绑定函数textvisible,通过绑定函数的返回值来决定是否可视。

(5)控件的可视性是个枚举值,所以我们需要设置返回的枚举值,需要一个这样的ESlate可视性类型的变量

(6)当控件启用的时候,我们让控件可视,当控件未启用的时候,我们让控件不可视。

(7)最后我们绑定函数返回控件的枚举值。

注意文字控件一开始是要隐藏的。

(8)我们对垂直框的可视性设置绑定函数GetVisibility_0。

(9)同时我们还需要根据这个布尔变量textvis的值设置垂直框的可视性,同时还得给垂直框创建个ESlate控件枚举值类型的变量。

(10)GetVisibility_0绑定函数设置如下:

(11)现在设置按钮的单击事件,当布尔变量textvis的值为真时设置为假,当假时设置为真:

12、先把BP_EventTrigger这个actor拖拽到场景中,这样场景中就有了这个类的对象实例了。

13、把刚做的控件赋值给公开的变量affectUM。

14、角色中把它显示出来,角色中添加自定义事件showUMG,用于显示控件。

这就是为什么我们需要的变量类型为用户控件的类引用,把变量AffectUMG赋予它:

我们设置下输入模式为设置仅输入模式UI,set input Mode UI Only:

添加到视口add to Viewport:

继续完善showUMG事件,让UMG_Exit添加到视口

先测试下效果:

没有触发成功,原因是什么呢?是因为我们还没有在BP_EventTrigger的重叠事件中“事件Actor开始重叠”中让角色显示控件。

运行效果如图:

单击按钮一下为:

15、为角色添加HideUMG自定义事件

当退出按钮被我们单击时调用。

添加点击时事件,我们需要运行角色的HideUMG事件,当然我们得需要角色先有HideUMG自定义事件,首先把显示控件添加的用户控件都给删除。

再把UMG_Exit移除

16、为UMG_Exit控件中的Exit退出按钮添加单击时事件

当退出时就不显示鼠标,鼠标是由玩家控制器控制的

发现当退出的时候,无法控制角色。

17、添加单击退出按钮退出菜单时让角色恢复控制权

运行测试无问题。

这里的控制权和鼠标显示与否的问题,可以把自定义事件写在玩家控制器里面,当用户控件被创建时,调用玩家控制器中的事件,让鼠标显示,设置输入模式仅UI,当单击退出按钮时,调用玩家控制器中的另一个事件让鼠标隐藏和设置仅输入模式游戏。


原文地址:https://blog.csdn.net/Growthofnotes/article/details/144588446

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!