UE4学习01
作者:互联网
UE4蓝图学习01
01 开关门互动实现
1.添加门的碰撞
把 LightSource 和 SkyLight 设置为可移动。在StartContent->Props里找到SM_Door,然后将其拖拽到游戏场景中,运行游戏,发现可以直接穿过门,于是需要添加门的碰撞。
双击SM_Door模型,进入模型界面,因为门的结构比较简单,所以在碰撞->添加盒体碰撞即可,运用变换工具使盒体的厚度与门基本相同。
然后再运行,发现人物穿不过去了,添加门的碰撞成功。
2.添加盒体触发器
在放置actor->基础里将盒体触发器拖拽出来,调整成合适的大小置于门附近。
3.开关门的实现
**关卡蓝图:**互动逻辑写到关卡蓝图中,场景的互动写到关卡蓝图中。
**事件:**事件告诉系统什么时候关门。
- 要将SM_Door模型设置为可移动。
- 选中SM_Door模型-》蓝图-》打开关卡蓝图,右键创建一个对SM_Door的引用。
- 选中其中一个TriggerBox,要创建一个进入触发器的行为,和一个离开触发器的行为。所以我们要在事件图表右键碰撞,创建一个进入的碰撞(OnActorBeginOverlap)和一个离开的碰撞(OnActorEndOverlap)。
- 因为我们要实现门的旋转,所以我们右键,创建一个设置Actor旋转,将SM_Door拖入到设置Actor旋转中,因为要让门绕着朝上的轴旋转,所以我们选择让门旋转90度,Z轴改为90°,此时将进入的碰撞(OnActorBeginOverlap)的执行拖入设置Actor旋转的执行,然后编译,运行的时候发现可以开了,但是是瞬间开启的,特别生硬,这时候我们需要添加时间轴。
5.右键新建一个时间轴,新建一个函数f,在第0秒插入关键帧,值为0,在第2秒插入关键帧,值为90,右键关键帧插值选自动,就可以创建一个速度开始慢后快最后再慢的函数,这样能够比较真实的模拟开关门,然后将长度设置为2.将New Rotation分割结构体引脚。然后就可以连接引脚了,如下图所示:
然后进行编译,运行,就可以实现一边的开门和关门了。
02 按键+鼠标点击实现开关门
1. 创建门的蓝图类
※Actor和组件的区别、轴心点的修改
首先,我们上面做的门自动开关有几个缺陷,那就是你每在场景中每创建一个门,就得添加一次盒体碰撞器,那如何才能解决这些问题呢,我们可以建立一个类,来把门以及他的盒体碰撞器包含进来,这样我们以后可以直接将这个类添加到场景,只需要做一次类,就可以让所有的门拥有开关门的效果,大大的提高了效率。
在UE4中,我们可以在内容浏览器中创建一个蓝图类,使用其中的Actor来实现,我们起名为Door_BP,打开后,将初学者包中的门框和门拖拽到组件栏中,再添加组件Box Collision(盒体碰撞器),简称为Box,调整父子级关系,门框为父级,门和盒体碰撞器为子级,注意盒体碰撞器不能为门的子级,否则会随着门的转动而转动。
接下来我们添加事件,右键Box-》添加事件-》进入碰撞和离开碰撞。
然后我们需要考虑上面自动开关门的第二个缺陷,就是门的方向万一改变了,那么旋转的角度就会很奇怪,永远是绕着世界坐标z轴从0到90度,为此,我们应该设置相对旋转。
于是我们添加门的设置相对旋转,再添加时间轴,设置参数,如下图连线,就完成门的蓝图类制作了。
2. 键盘E键实现开关门
要实现按E键开关门的操作,首先我们得确保走进盒体碰撞器中,然后再按输入E键开启门,这时我们就需要有一个组件可以在我们进入盒体碰撞器中才使输入E键有效,不然的话在地图随便一个地方都能开门就不符合逻辑了,在UE4蓝图中名字叫Gate,然后我们搜索键盘-》找到其中的E组件作为Enter。
这时我们就要在Gate之前添加启用输入和禁用输入组件,再添加获取玩家控制器组件,这样我们才能使用控制的角色启用和禁用输入。此时我们连线之后发现只能开门,不能关门,所以我们需要添加一个Flip Flop组件,可以在我们第一次按E的时候开门,第二次按E的时候关门。最终连线如下图所示:
3. 鼠标左键实现开关门
首先在窗口打开世界场景设置,将游戏模式重载改为第三人称模式,然后新建一个玩家控制器类,在鼠标接口启用点击事件。
然后在门的蓝图类里右键SM_Door,创建On Clicked事件,替换掉E按键,此时运行发现找不到鼠标光标位置在哪,需要开启,添加组件,关闭情景关联,搜索set show mouse cursor,添加设置显示鼠标光标组件,在进入盒体碰撞器时显示光标,离开后不显示鼠标光标,就实现了左键开关门。最终连线如下图所示
03 字体导入、光照重建
字体导入的三种方法
首先要在网站中把需要下载的字体文件下载下来,建议单独保存在一个文件夹中。
- 将需要的字体文件拖拽到内容浏览器中;
- 在内容浏览器中导入;
- 在内容浏览器右键-》创建高级资产-》用户界面-》字体,然后打开它,在默认字体族系中添加,可以看到支持的字体文件后缀是.ttf,.ttc,.otf,.otc这四种。大众免费的宋体和黑体,其他的基本都只能用在非商业途径。
光照重建
在将模型拖入到场景中时,会经常发现在左上角出现光照未构建的红字,这时候模型所现实的光照效果和阴影并不一定是正确的,此时有几个方法可解决此问题:
1.将所有灯源改为可移动,此时为实时渲染,性能消耗大。
2.世界场景设置-》Lightmass-》光照贴图-》强制无预计算光照。
04 简易电梯的制作
之前我们制作过自动的开关门,按键开关门和鼠标点击开关门,与我们的电梯制作有很多的相似之处,但是电梯需要有一个比较特殊的地方,就是它的盒体碰撞器需要随着电梯的移动而移动,实现这一点的方法也很简单,就是将其作为电梯的子对象,下面开始教程。
1.创建一个Actor蓝图类,起名为电梯_BP(BP的意思是blueprint,蓝图的意思),添加一个Cube 和一个Box Collision,将盒体碰撞器置于Cube子类中,这样可以实现盒体碰撞器随着电梯的移动而移动。
2.设置Cube为电梯形状,然后再调整盒体碰撞器的大小,最终效果如图所示:
3.添加盒体碰撞器的开始重叠组件和结束重叠组件,然后再添加Gate组件,确保启用键盘输入,再添加获取玩家控制器、启用输入和禁用输入来保证完成,这里我们使用键盘E键来实现上下电梯。因为我们不仅要上电梯,而且要下电梯,所以要添加一个Flip Flop组件保证第一次是上电梯,第二次是下电梯。
4.添加时间轴,这次我们创建f轨道函数,起始值为(0,0),结束值为(T,1),T为时间,这里我们取3,即3s完成电梯升降过程,实际可以自由发挥,然后我们添加一个Lerp插值组件,它可以基于一个轨道函数,在A与B之间进行线性插值,value = A×f + B×(1-f),通过测量知道一层二层的高度差为,所以我们我们把A值设置为0,B值设置为高度差,曲线为时间轴的f轨道函数。
5.添加电梯的设置相对位置组件,将位置变量分解,进行连线,最终结果如下图:
6.保存,编译,拖入到世界场景中,测试,发现运作正常。
05 自动门的制作
自动门为两扇玻璃材质的门紧紧挨着,当角色到达门前时,门自动打开,当角色离开门一段距离时,门自动关闭。
此蓝图类制作要点是,要对两扇门分别设置相对位置,因为两扇门开启的方向是相反的。
实现细节如下图所示:
06 钥匙开门的实现
实现的效果是在没有拾取到钥匙时,门按e键不会开门且提示你没有钥匙,在拾取钥匙后,钥匙消失,在门前按e键能够开门。
要实现这样的效果,我们要有一个变量,来确定是否拥有开门的能力,最适合的类型是布尔型,在蓝图类的变量里添加一个布尔变量,然后加入一个流程控制branch分支组件。当结果为True时继续流程,当结果为False时打印字符(你没有钥匙!)。
然后再新建一个钥匙Key的蓝图类,做一个钥匙的建模,然后创建它的盒体碰撞体或者胶囊碰撞体,在事件列表里重要的组件是获取类的所有Actor,用于修改门蓝图类中能够控制门的布尔值,按E键后,将其设置为True,然后销毁该类(使用摧毁Actor组件)。
最后的连线图如下所示:
标签:01,盒体,蓝图,碰撞,学习,开关门,添加,组件,UE4 来源: https://blog.csdn.net/NaGeZuo/article/details/117563158