UE4学习笔记27——【UI】3DUI的交互和显示

  • P69. 3DUI的交互和显示
  • P69

 (新建一个包含第一人称射击模板的项目)

新建一个文件夹(用于存放自己新建的文件)(我重命名为了“WJJ1221P69”),在此文件夹中,右键 “用户界面——控件蓝图”,重命名为“全自动_UMG”;

打开此控件蓝图,拖拽一个“按钮”到“画布画板”的下级,锚点居中,大小和位置适当调整;然后再拖拽一个“文本”到“按钮”的下级,文本内容改成“半自动”,字体大小适当调整;

之后相同的操作(或者复制刚才的),适当调整,文本内容改成“全自动”;

(可以给两个文本添加个描边(“外观——字体——轮廓设置——轮廓大小”))

  

(3DUI通常要以actor的身份存在于世界当中)

 在自己的文件夹中,右键“蓝图类——Actor”,重命名为“3Dwidget_test1”,然后打开它;

左上 组件 面板,“添加组件——控件组件”,单击这个新添加的“控件组件”,细节 面板,“用户界面——控件类”选择“全自动_UMG”(我们新建的控件蓝图),“用户界面——绘制大小”的X和Y分别改成1280和720(因为“全自动_UMG”的大小是1280×720);

切换到“全自动_UMG”控件蓝图,从控制板 面板,从“通用”拖一个“边界”到“画布画板”的下级,与两个按钮同级但是在两个按钮之上(不然会覆盖掉两个按钮):

  

把此“边界”全屏(锚点选右下角那个,偏移量全改为0),颜色改成偏灰色的,透明度改成0.8:

  

完成后编译;

切换到“3Dwidget_test1”蓝图类,单击组件 面板中的“widget”,细节 面板,“渲染——混合模式”改成“透明”,编译后回到关卡编辑 界面,拖一个“3Dwidget_test1”到场景中看一下:

  

(如果拖进去没有显示 一片空白(透明),可能是角度反了,从另一侧观察一下或者把这个蓝图类旋转180度看一下(我一开始就是这个问题))

回到“3Dwidget_test1”,单击widget,细节面板,“变换——缩放”的XYZ全部改成0.2(缩小UI,之前的太大了);再把“用户界面——绘制大小”的XY改成1920和1080(这样看起来比较“美观”);

打开“FirstPersonCharacter”蓝图类,组件 面板,在“FP_Gun”下添加组件“控件交互组件”,单击这个组件,视图中红色箭头就是它,然后把他旋转到和枪的朝向一致,拉出来一点,调整高度,放到枪口的位置上:

      

 

细节 面板,“调试——显示调试”打勾;

打开“FirstPersonCharacter”的事件图表,从组件 面板拖一个刚才添加的“控件交互组件”,从此节点添加节点“按下指针键”,“Key”选“鼠标左键”,节点“输入操作Fire”的“pressed”连接“按下指针键”的前端执行,从节点“输入操作Fire”的“released”添加节点“松开指针键”,“key”同样改成“鼠标左键”;

(和3DUI互动,不发射子弹;没有和3DUI互动,发射子弹)

从节点“按下指针键”添加节点“分支”,从节点“按下指针键”前的“widget interaction”添加节点“在可聚焦控件上方”,此节点的“return value”连接“分支”的“condition”,“分支”的“false”连接后面的“蒙太奇播放”(原来是“输入操作fire”连接的);

(下面做全自动和半自动)

添加节点“添加自定义事件”,重命名为“是否全自动”;添加一个bool型变量,重命名为“是否能够全自动”,把此变量拖拽到节点“是否全自动”的执行端,然后把新节点的“是否能够全自动”前面的红圈连接到节点“是否全自动”(节点“是否全自动”还没有对应的点,拖拽过去自动就有了):

  

(上面的目的是:通过调用自定义事件来设置这个bool值)

在上面的蓝图,节点“按下指针键”后面的节点“分支”之后,再添加节点“分支”,拖拽一个变量“是否能够全自动”到节点“分支”(新添加的)的“condition”上,前面的节点的“false”连接此分支节点,此分支节点的“false”,连接“蒙太奇播放”(如果不是全自动,就正常的和刚才一样);

添加节点“自定义事件”,重命名为“全自动射击”,此节点的执行连接“蒙太奇播放”的前端执行;添加节点“以函数名设置定时器”,第二个“分支”的“true”连接此节点的前端执行,“function name”改成“全自动射击”(自定义事件),“time”改成0.1(延迟0.1s触发自定义事件)(间隔时间越短射速越快),“looping”打勾(没延迟0.1s就触发这个自定义事件(射击));

从节点“松开指针键”添加节点“以函数名清除定时器”,“function name”填“全自动射击”;

切换到“全自动_UMG”控件蓝图,从细节面板添加两个按钮的“点击时”节点;打开“全自动_UMG”的图表,从节点“事件构造”(如果没有则添加)添加节点“获取类的所有actor”,“actor class”选“FirstPersonCharacter”,从“out actors”添加节点“get(复制)”,右键“get”节点右侧的蓝色小圈,“提升为变量”(变量名字重命名为“player”),然后会多出一个节点,此多出节点的前端执行连接“获取类的所有actor”的后端执行;

 

拖拽一个变量player的“获取player”到代表“半自动按钮”的节点旁,从“player”添加节点“是否全自动”,“半自动按钮”后端执行连接“是否全自动”;对于“全自动按钮”,给予同样的两个节点和连线方式,不同的是节点“是否全自动”的引脚“是否能够全自动”打勾;

到此已经可以实现半自动射击和全自动射击(鼠标按下一直开枪,松开停下);

整理一下各个部分的事件图表等:

  FirstPersonCharacter蓝图类 事件图表:

    

 全自动_UMG事件图表:

  

(〃>_<;〃)(〃>_<;〃)(〃>_<;〃)

posted @ 2022-12-26 19:48  我会变强的  阅读(1646)  评论(0编辑  收藏  举报