UE4学习笔记26——【UI】UI动画和暂停游戏

  • P68. UI动画和暂停游戏
  • P68

(需要包含第一人称射击模板) 

新建一个文件夹(WJJ2119P68),在此文件夹中,右键 “用户界面——控件蓝图”,重命名为“Pause”,然后打开此控件蓝图;

左侧“控制板”面板,从“通用”拖拽“边界”到左下方“层级”面板中的“画布画板”的下级:

  

适当调整此“边界”的位置和大小(拖到视口大概中间的位置,大小看着合适就好,粗略手动调一下就好),细节面板 “外观——笔刷颜色——A”改成0.5(这个是有关透明度的)(“外观——笔刷颜色”改的是边界的颜色,“内容——内容颜色和不透明度”改的是边界下级的控件的颜色(比如在此“边界”的下级再放个文本、图片等))

  

锚点的设置:

  

 

“插槽”中的位置X 位置Y 对齐:

  

从左侧“控制板”面板,拖拽一个“通用——文本”到左下方“层级”面板中的“画布画板”下级(和“边界”放到同一级),此“文本”的锚点和位置等等和刚才“边界”的设置相同(参考上面两张图),然后勾选上“插槽——大小到内容”(使文本框的大小和文本的长度和高度一样);

适当调整字体大小(“外观——字体——尺寸”)和文字的位置(主要是文本在整个视图中的高度,修改的稍微靠上一点,“插槽——位置Y”);

添加一个“通用——按钮”到“画布面板”的下级,锚点居中;在此按钮的下级添加“通用——文本”,文本内容改成“是”;在“层级”面板中选中这个按钮和它下级的文本,ctrl+c,粘贴到“画布画板”的下级,新的文本改成“继续游戏”,适当调整按钮的位置:

  

选中文本是“是”的按钮,细节面板,添加“事件——点击时”;选中文本是“继续游戏”的按钮,添加“事件——点击时”;

从“是”按钮节点添加节点“退出游戏”;

(如果 继续游戏 就让这个UI不可见)从“继续游戏”按钮的节点添加节点“设置可视性”,“in visibility”选择“已折叠”;

 回到 关卡编辑 界面,打开“FirstPersonCharacter”蓝图类,打开 事件图表,添加节点“事件开始运行”,从此节点添加节点“创建控件”,“class”选择“Pause”(我们自己的控件蓝图的名字),右键引脚“return value”,选择“提升为变量”,把这个变量的名字重命名为“Pause”;

 (UI一开始也应该是不可见的)从节点“Pause”(变量)添加节点“设置可视性”,“in visibility”选择“已折叠”,“设置可视性”的“目标”连接“Pause”的蓝色引脚;再从“Pause”的蓝色引脚添加节点“添加到视口”,此节点的前端执行与“设置可视性”的后端执行连接;(错了,添加到视口 和 设置可视性 的位置互换一下)

然后添加一些节点实现“按Q键暂停”(直接给个蓝图):

  

(目前的运行情况:UI出来但是鼠标没出来,点不了,下面要让鼠标出来)

切换到 关卡编辑 界面,右侧“世界场景设置”面板,点击“游戏模式——游戏模式重载”后面的+号(新建一个游戏模式),然后在新弹出的窗口中把它放到一个自己能辨别清楚的文件夹中(我放在了WJJ1219P68)(然后我把这个新的游戏模式蓝图类重命名为了“GameModeP68”);

 

然后“世界场景设置”面板,“游戏模式——游戏模式重载”选择“GameModeP68”,“默认pawn类”选“FirstPersonCharacter”;

切换到“FirstPersonCharacter”蓝图类,打开 事件图表,添加节点“获取玩家控制器”,从此节点添加节点“set show mouse cursor”,节点“set show mouse cursor”的前端执行和“键盘Q”后面的“设置可视性”的后端执行连接,“显示鼠标光标”打勾;

从“获取玩家控制器”的“return value”添加节点“设置仅输入模式UI”,节点“set show mouse cursor”和执行和节点“设置仅输入模式UI”相连;

  

 

(目前的运行情况:按Q之后UI出来 鼠标也出来了,点“是”之后退出游戏,点“继续游戏”没有响应)

(下面做“继续游戏”按钮的功能实现)

切换到“Pause”(控件蓝图),添加节点“获取玩家控制器”,从此节点添加节点“set show mouse cursor”(“显示鼠标光标”不打勾,让鼠标不可见),从“获取玩家控制器”的“return value”添加节点“设置仅输入模式游戏”;

  

(目前的运行情况:点击“继续游戏”之后确实能又回到游戏的状态,但是如果玩家移动的同时按了Q,那么出现UI时玩家会一直朝那个方向移动)

(下面做按Q暂停)

切换到“FirstPersonCharacter”蓝图类,从节点“设置仅输入模式UI”添加节点“设置游戏已暂停”,引脚“Paused”打勾;

 

(现在按Q之后再点击“继续游戏”,游戏还是暂停的,所以下面做点击“继续游戏”后把“暂停”取消)  

切换到“Pause”(控件蓝图),从节点“设置仅输入模式游戏”添加节点“设置游戏已暂停”,引脚“Paused”不打勾;

(下面做UI动画)

打开“Pause”(控件蓝图)的“设计器”(右上角):

  

 

左下角 动画 面板,点击“+动画” ,重命名为“Appear”;

从左上角 控制板 面板,“面板——画布面板”拖拽一个“画布面板”到层级 面板的“画布面板”下级,锚点设置为全屏(下面左图,右下角那个代表全屏),各偏移量设置为0:

     

 

然后把“层级”中之前属于默认“画布画板”中的东西移动到刚才新添加的画布画板中(移动之后层级可能会有错误,自己调整一下):

  

(为什么要换“画布画板”,我还不明白)

选中刚刚添加的 画布画板,再点击 动画 面板中的“Appear”,再点击 时间轴 面板的“+轨道——画布画板”,再点击新出来的条目后面的+号,选择“变换”;

先把“变换——缩放”中的X和Y都设置为0,然后拖动右边的轴到1s的位置,再把X和Y改成1(从中间缩放出来的动画效果):

  

控制板 面板,“特殊效果——背景模糊”,拖拽一个到最原始的“画布画板”下级(在“层级”面板中),“背景模糊”要放在新的“画布画板”的同级上层(如果背景模糊在新画布画板的下面(不是下级是下面,那么这个新画布画板也会被模糊)(我的理解是下面的相当于新加的东西,新的东西会覆盖掉之前的东西))然后把这个“背景模糊”全屏(先设置锚点全屏,再设置偏移量全都为0);

    

选中“背景模糊”,再点击 动画 面板中的“Appear”,再点击 时间轴 面板的“+轨道——背景模糊”,再点击新出来的条目后面的+号,选择“渲染不透明度”;

把右边的关键帧拉到0s,设置这时的不透明度为0(背景为透明(不模糊)),再把关键帧拉到1s,设置这时的不透明度为1(UI出来,背景不透明(模糊));

 

 (下面运用这些动画)

切换到“Pause”的图表,添加节点“添加自定义事件”,重命名为“开始播放动画”;左侧的“变量”中有个“Appear”(我们刚才新建的动画的名字),ctrl拖出到图表中,然后从“Appear”添加节点“播放动画”,“开始播放动画”的后端节点和“播放动画”的前端节点相连;

切换到“FirstPersonCharacter”蓝图类,从节点“Pause”添加节点“开始播放动画”,此节点连在“设置可视性”和“set show mouse cursor”的中间;

(到目前按Q已经可以有动画效果了)

(下面做点击“继续游戏”后反向播放动画)

直接给蓝图(“Pause”控件蓝图中):

  

 

(为什么“设置可视性”要放在播动画后面:因为如果一点击“继续游戏”UI就不可见了,播不播动画也就看不出来了,所以播放动画->延迟1s(因为动画的时间是1s)->UI消失) 

(但是这个是有BUG的:点击“继续游戏”后,如果在1s之内又按了Q(暂停游戏),上一次的“继续游戏”中的Delay走完就把UI隐藏了,此时画面没有UI且画面暂停住,我们也没办法继续了)

(下面解决这一问题,就是按Q的时候判断动画有没有在播放)

切换到“FirstPersonCharacter”蓝图类,在“键盘Q”后的“is valid”后添加节点“Branch”,从“Pause”添加节点“获取Appear”,然后从“获取Appear”添加节点“动画正在播放”,“return value”连接“branch”的“condition”,“目标”连“Pause”;

“branch”的“false”连“设置可视性”的前端连接,“true”空着,不连接(就是说,如果正在播放动画,那么此时按Q不做任何处理;如果此时没播动画,按Q会正常响应);

(又出新问题了:第一次按Q正常,然后点继续游戏,再按Q就不会有任何响应了(游戏不暂停),原因是“动画正在播放”返回的是true(为什么是true我也迷糊,此时动画明明已经没了啊),true空连接所以不会有反应)

(解决上面的问题)

切换到“Pause”控件蓝图的图表,在代表“继续游戏”的按钮节点之后的“设置可视性”节点后,添加节点“停止动画”,“in animation”连接“Appear”;

完成了,总结一下各个蓝图图表:

  “Pause”的事件图表:

 

  “FirstPersonCharacter”事件图表:

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

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