UE5自学记录(第三天)

9.如何用UE5的蓝图类实现类似C++的函数参数效果

昨天实现了发射红色的球,接下来将要实现按不同的键发射不同颜色的球的功能,而如果想要快捷的改变球的颜色,或者便捷的增加多种球的颜色,就要用到蓝图类的 转换为参数

转换为参数

因为我们想要改变的是球的颜色 所以首先打开昨天已经完成的 红色的光的 材质,按下图操作,重命名参数名称后,切记,点击应用按钮或保存按钮以实现修改!!!

回到内容浏览器,鼠标右键打开菜单,选择创建材质实例后,双击进入新创建的材质实例中

勾选右侧细节 参数组 你所命名的参数名字 修改你想要的颜色 保存

这样,你就快速创建了一个新的颜色

选择你所修改的材质实例,使用快捷键Ctrl+D,就可以快速复制你的材质实例,双击进入修改即可变为新的材质实例

完成不同颜色的光的创建之后,接下来要实现不同颜色的球的实现,有2种方法,分别是继承和复制

方法一:复制

在内容浏览器中按快捷键Ctrl+D复制一个红色的球,重命名为绿色的球后,双击进入蓝图,你会发现所有的内容(事件图表)都和红色的球是一模一样的,改动材质以实现绿色的球的实现

方法二:继承(创建子蓝图类)

在内容浏览器中选择发光的球,按鼠标右键打开菜单,选择创建子蓝图类,重命名为蓝色的球后双击进入蓝图

选择事件图表,此时你会发现和复制不同,继承是先经过父类(发光的球)的方法,然后单独执行子类(蓝色的球)的方法

以上两种方法的区别最简单的理解是,复制相当于新创建了一个东西,修改后和之前复制的对象就没有关系了,而继承则不一样,修改继承的父类对象,子类对象也会跟着更改

折叠节点与折叠到函数

接下来进入角色蓝图,找到昨天实现的创建球的方法,因为 折叠节点 的引用对象只能自身(对现阶段没有影响),所以我们需要展开节点,并使用另一个选项 折叠到函数,然后双击进入函数,函数的引用对象可以修改

我们需要生成不同的球,所以将Class拖动至入口,让我们可以从函数外部修改生成不同的物体

然后在函数外部选择Class,搜索自己命名的物体并选择

然后可以将他们框选起来并复制

再选择不同的按键输入,在右侧细节中 点击如下按键 在按钮亮起时选择你想要按什么键发射球即可,重复修改,编译保存

最后蓝图与效果如下:

10.触发区域

PS:实现之后的功能前已修改球的生成位置,速度,与大小(忘记如何修改的就说明需要复习咯)

接下来尝试实现一个球过门发光提示命中的效果

首先在内容浏览器 蓝图文件夹下创建一个Actor蓝图类,双击进入,然后用之前学过的知识制作出一个简易的门框(缩放,快捷键,添加的复习)

然后 在添加中搜索光 添加点光源 并将光源设置为默认关闭 即细节栏内找到可视,取消勾选

接下来为你的门框添加材质

如何找到场景中已有物体的材质位置

单击场景中物体,在右侧细节中选择如下按钮,即可找到对应材质位置

修改好材质后在添加中下滑菜单栏找到触发区域,添加盒型触发区域并将它添加到合适的位置

之后点击添加的触发组件,在右侧细节中找到事件,添加组件开始重叠时事件,然后按照逻辑 球接触到检测区域 设置光的可见性 的逻辑进行蓝图设置

然后将 门框 摆放在地图场景中,测试效果如何,现阶段效果如下:

此时会发现人过去灯会亮,而球过去灯不会亮,这是因为一开始设置了球的碰撞效果,现在我们需要进行修改,进入发光的球的蓝图 在组件中单击球选中后 在右侧细节处找到碰撞预设 选择Custom进行自定义设置 按如下图进行修改 详情可参考官方链接:虚幻引擎中的碰撞响应参考 | 虚幻引擎 5.5 文档 | Epic Developer Community

目前我们仅仅需要忽略角色的碰撞即可,效果如下:

延迟与可再触发延迟

接下来我们尝试继续修改逻辑,球经过门,灯亮起3s后关闭,此时需要用到UE5的一个常用蓝图 延迟

此时完整逻辑如下:

编译后效果如下:

此时会发现灯光在亮起你所设置的延迟秒数后会熄灭一下再亮起,若你想要在球经过时重置计时器,即球经过时灯一直亮起,最后一个球通过后经过你所设置的秒数后再熄灭,则需要用到可再触发延迟,逻辑如下:

编译后运行,此时效果如下:

此时又发现,球经过会亮灯,人经过也会亮灯,那么如果我想人过不亮灯而仅球过亮灯,应该怎么做

类型转换

如果需要实现上述逻辑,则需要在物体产生碰撞时,检测物体的类是什么,只有是我们需要他产生效果的类才继续接下来的逻辑

Other Actor传递过来的参数是产生碰撞的物体的类

下图逻辑为:产生碰撞 尝试将产生碰撞的物体类转化为发光的球类, 若转化成功则设置灯亮

只有同属发光的球类以及他的子类才可以转换成功,所以相当于ifelse判断了

下图是若转换失败则如何

编译后运行效果如下:

11.主角数据和UI界面的参数传递

更改父类

PS:在接下来的操作之前,首先把之前Ctrl+D复制的球 更改为 发光的球的子类,把角色蓝图名字重命名为主角以方便后续操作

注意要删掉原来一个球的实体与发射器,仅留下父类蓝图的实体,并删除原蓝图所有逻辑,引用父类逻辑(否则还是原来的实体参数),修改材质后保存编译

完成后首先要在父类中添加一个变量,以便于子类进行修改

在子类中修改不同球的分数

重命名

UI

接下来制作一个简单的UI主界面,在内容浏览器中新建一个UI文件夹,并点击鼠标右键在菜单中找到用户界面 控件蓝图 用户控件 之后重命名,双击进入蓝图

首先在左上角搜索画布,并拖拽到蓝图中,然后打开通用,找到文本,拖拽到画布中

拖拽无法修改字体大小,修改字体的大小和尺寸需在右侧细节栏中修改

接下来为了让UI布局变得好看,整洁,在左下方中找到水平框(排版布局),点击后选中文本,Ctrl+D复制一个在旁边,效果如下:

在尽量不改变其他逻辑的情况下添加逻辑

接下来需要初始化面板,但是目前为了简便,角色的现有逻辑我不想修改,应该如何做?

只需要在角色蓝图中右键添加 自定义事件

然后在角色原有逻辑上添加即可

创建控件与添加到视口

接下来回到自己编写的逻辑,以此搜索 创建控件 添加到视口

逻辑为:初始化开始 创建控件 控件添加到视口(因为有的控件可能在其他组件下不在视口)

接下来回到UI蓝图中,打开图表,添加一个主角的变量,并勾选左下角细节栏中的生成时公开(以便于游戏开始时传递主角的所有参数给UI)

刷新节点

回到角色蓝图,当你修改某个蓝图后却没有显示对应的修改,此时可以刷新节点,然后将自己的数据传给他,逻辑如下:

再为主角添加一个变量,为主角的分数,编译后回到主界面蓝图,在设计器中绑定数据,操作如下:

准备工作已经就绪了,接下来就是处理加分的逻辑,打开触发区域的蓝图,开始处理逻辑,应该的逻辑如下:

球进入触发区域 获取球的分数 (同时 获取玩家控制器 转化为玩家具体操作的角色类型 获取角色得分)将角色得分+球的得分 设置角色得分(因为角色得分已经和UI绑定)

分别搜索 你所对球设置的分数变量名称 下三幅图  + 你对玩家设置分数变量的名称

转换为纯类型转换

使用此选项可以减少引脚的使用

完整逻辑如下:

效果如下:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值