UE4学习笔记10——【蓝图】电梯,双开自动门、旋转门

  • P30. 字体导入、光照重建
  • P31. 通过按键升降电梯
  • P32. 双开平移自动门
  • P33. 双开旋转门
  • P34. 获得本地坐标,错误修复
  • P30
  •  字体导入的三种方法

1. 在路径 C:\Windows\Fonts 下找一种字体(网上找也可以)

在UE4的内容浏览器中,“添加/导入——导入资产”,然后选择刚才的字体;弹出一个新的对话框,选“全部选是”,完成。

2. 不要最大化UE4界面,把要添加的字体文件拖拽到内容浏览器中,新弹出的对话框选“全部选是”。

3. 右键内容浏览器中的空白处,选“用户界面——字体”,创建好之后双击点开进入一个字体编辑界面,点“默认字体族系”中的“添加字体”,选择一个字体文件,全部弄好之后,如果上面的窗口名字带“*”则要点左上角的保存按钮。

  • 光照重建

(如果不想让“光照需要重建”一直显示在左上角 的 几种方法)(我自己一般用第一种,或者哪种都不用直接构建光照)

1. (前几节课说过的)把世界大纲视图中的灯光,在细节中改成“可移动”

2. 在“世界场景设置”(和“细节”同一级的窗口)中,把“Lightmass——强制无预计算光照”勾选上

3. 在“内容浏览器”的右下角“视图选项”,勾选“显示引擎内容”;然后在“内容浏览器”的“引擎目录”下搜索“preview”,找到“Preview Shadow Indicator”(是球,不是全黑的那个),双加点开

  

然后在新开的蓝图编辑界面把这条线删掉(记得要保存):

  

 

  • P31. 通过按键升降电梯

 在“内容浏览器”的空白处右键,选“蓝图类”,然后选第一个“Actor”,命名好名字之后双击打开

左上角“添加组件——立方体”,把它压扁,作为平台

与此立方体同级的添加一个“Box Collison”(一个触发盒子),把触发盒子的长宽改成和刚才平台(立方体)差不多的大小(要在立方体下级添加触发盒子,因为如果同级添加,那电梯上去之后触发盒子还在下面,此时人在电梯上就没有办法操控电梯;如果由于添加到下级而不方便改变触发盒字的大小,可以先不在下级添加,改到合适的大小后再把它挪到Cube下级)

单击一下左侧的“Box”,在“细节——事件”,分别添加一个“组件开始重叠时”“组件结束重叠时”;再在事件图表“添加时间轴”,添加“Gate”(快速添加方法:按住键盘G + 鼠标左键),“FlipFlop

 给“时间轴”添加关键帧(0,0)和(2,1),修改长度,右键关键帧(0,0)把关键帧插值改为自动(然后手动调整);最后编译;

 “事件图表”中搜索“lerp”添加“插值”:

    

 

(浮点数-插值:Alpha是0时,输出A;Alpha是1时,输出B;如果Alpha从0到1有个过渡,输出也会从A到B有个过渡;所以只要在时间轴设置关键帧的值0和1,再在“插值”中的A和B设置具体的值就行了;其他类型的lerp也是类似的作用)

把左侧“组件”中相当于电梯平台的“Cube”拖拽到“事件图表”中

“事件图表”中搜索并添加“设置相对位置”,添加相关连线,把“插值”中的B设为200(暂定);添加“键盘E”,搜索“get player controller”添加“获取玩家控制器”,添加“启用输入”,添加“禁用输入

最终连线:

  

 

 

如果出错了不知道问题出在哪 或需要调试,可以在蓝图编辑页面的上方,在“调试过滤器”中选择我们想要看到的图兰工作情况,然后把蓝图页面和运行窗口都适当缩小,一般运行(试玩)一般看蓝图的工作情况

  

 

如果想在运行过程中查看碰撞(比如想看触发盒子在某个运行过程中在哪里)(貌似只能在“运行——选中的视口”使用),我们可以在运行过程中按 Shift + F1 调出鼠标点“暂停”,然后点“弹出”,接着在视口左上角把“显示——碰撞”勾选上,这时就能在某个运行时刻查看这个时刻的碰撞物体在哪:

    

 

  • P32. 双开平移自动门

(为了方便,复制一个上节课电梯的蓝图,在那里面进行修改)

把之前的Cube竖起来,“细节——材质”里搜“glass”,然后选择“M_Glass”

(在“蓝图类”编辑界面的“视口”界面 把Cube往想移动的方向动一动,看看右侧“细节——变化——位置”中是XYZ哪一个变量在变化,那么之后在“事件图表”中就修改相应组件(比如lerp)的XYZ)

把Box改成和Cube同级(不随Cube的移动而移动,这样符合实际情况);在移动方向缩放Cube,并且再复制一个出来;

————————————————————↓

由于Cube1 和 Cube2 的起始位置不同,目标位置不同,所以需要用两个“Lerp”

“Lerp”的 A值 每次需要手动输入很不方便,而且如果在“视口”中改变了静态网格体的起始位置,我们还需要去“事件图表”手动修改“Lerp”的A值,有没有一种方法能让我们直接把Cube的起始值传给“Lerp”中的A呢?

方法:在“事件图表”中,从Cube右端拉出一条线,搜索“get relative location”,选择“获取 Relative Location”,然后右键新组件的右边的按钮,选“分割结构体引脚”,把其中XYZ的一个值(需要哪个用哪个)跟“插值”的A相连

    

(这节用“获取Relative Location”出了点问题,还是手动输入起始位置;后面的视频中会讲这个问题)

————————————————————↑

连完线:

  

然后就可以实现双开自动门的效果了

 

  • P33. 双开旋转门

要实现的效果:鼠标无论点击两个门中的哪一个,都实现开关两扇门。

 (在P28(鼠标点击实现开关门)的基础上做)

(在“蓝图类”的编辑界面)去掉之前的门框;复制一个Door并调整角度(两个门的门把手在一块),调整触发盒子的位置和体积:

  

直接放事件图表:

  

红框是是相较于之前多的部分;注意:两扇门的初始角度和开门后的角度都不一样,两个lerp的A B值要注意修改

 

  • P34. 获得本地坐标,错误修复(还是不对,会了再更新;同时真诚求教)

(针对P32“获取Relative Location”)

  

在上面这幅图中,第一次执行开门动作 Cube2 的相对位置X 传给A之后,门的位置从A变为B;但是与此同时,Cube2 的相对位置X 会变成B的值,以至于后面再执行关门或开门时会发生错误。

(这期讲的方法还是错的......C先生用一个变量来接收 相对位置X的值,然后把这个变量连到时间轴之前,在时间轴之后的Lerp中用这个变量给Lerp的A赋值;但问题是他这个变量是一直在获取 相对位置X的值的,经历了一次开门动作后 变量获取了新的值,还是会出错(〃>_<;〃))

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

posted @ 2022-10-23 14:47  我会变强的  阅读(1109)  评论(0编辑  收藏  举报