效果展示:
操作步骤:
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,当单击退出按钮时,调用玩家控制器中的另一个事件让鼠标隐藏和设置仅输入模式游戏。