ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

UE4学习01

2021-06-16 21:33:08  阅读:404  来源: 互联网

标签:01 盒体 蓝图 碰撞 学习 开关门 添加 组件 UE4


UE4蓝图学习01

01 开关门互动实现

1.添加门的碰撞

把 LightSource 和 SkyLight 设置为可移动。在StartContent->Props里找到SM_Door,然后将其拖拽到游戏场景中,运行游戏,发现可以直接穿过门,于是需要添加门的碰撞。
双击SM_Door模型,进入模型界面,因为门的结构比较简单,所以在碰撞->添加盒体碰撞即可,运用变换工具使盒体的厚度与门基本相同。
然后再运行,发现人物穿不过去了,添加门的碰撞成功。

2.添加盒体触发器

在放置actor->基础里将盒体触发器拖拽出来,调整成合适的大小置于门附近。

3.开关门的实现

**关卡蓝图:**互动逻辑写到关卡蓝图中,场景的互动写到关卡蓝图中。
**事件:**事件告诉系统什么时候关门。

  1. 要将SM_Door模型设置为可移动。
  2. 选中SM_Door模型-》蓝图-》打开关卡蓝图,右键创建一个对SM_Door的引用。
  3. 选中其中一个TriggerBox,要创建一个进入触发器的行为,和一个离开触发器的行为。所以我们要在事件图表右键碰撞,创建一个进入的碰撞(OnActorBeginOverlap)和一个离开的碰撞(OnActorEndOverlap)。
  4. 因为我们要实现门的旋转,所以我们右键,创建一个设置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 字体导入、光照重建

字体导入的三种方法

首先要在网站中把需要下载的字体文件下载下来,建议单独保存在一个文件夹中。

  1. 将需要的字体文件拖拽到内容浏览器中;
  2. 在内容浏览器中导入;
  3. 在内容浏览器右键-》创建高级资产-》用户界面-》字体,然后打开它,在默认字体族系中添加,可以看到支持的字体文件后缀是.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组件)。
最后的连线图如下所示:
Door的蓝图类
Key的蓝图类

标签:01,盒体,蓝图,碰撞,学习,开关门,添加,组件,UE4
来源: https://blog.csdn.net/NaGeZuo/article/details/117563158

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有