UE4学习笔记18——【选看】蓝图接口(不详细,只是用到),射线检测

(为什么是18没有17,因为17写的不好,仅自己可见)

  • P51. 蓝图接口的使用和用途
  • P52. 拾取物品1——射线检测的计算方式
  • P53. 拾取物品2——碰撞设置、蓝图接口
  • P51

首先,在“内容浏览器”中新建一个蓝图类(Door_BP),添加门框、门、碰撞盒子:(蓝图逻辑暂时不写)

  

回到默认编辑器的界面,在“内容浏览器”创建“蓝图接口”(重命名为“DoorInterface”):

  

双击打开刚才新建的蓝图接口,右上角给函数重命名“CanOpenDoor”:

  

切换到“Door_BP”蓝图编辑界面,点击工具栏中的“类设置”,然后在右边的“细节——接口”中,添加“DoorInterface”(刚才我们新建的“蓝图接口”)(记得要编译)

    

在当前蓝图编辑器的“事件图表”中添加“事件”“CanOpenDoor”,然后写一个 开门 的操作:

  

把“碰撞盒子”的“组件开始重叠时”和“组件结束重叠时”添加进来,然后添加“类型转换为ThirdPersonCharacter”:

  

然后切换到(打开)“ThirdPersonCharacter”蓝图(小白人蓝图),新建一个变量“Door”,变量类型选择“Door_BP”(就是我们一开始建的那个蓝图类的名字)

  

 

(现在,这个变量“Door”是“空”的,我们需要对它再进行设置)

切换到“Door_BP”蓝图类,在节点“类型转换...”的引脚“as ThirdPersonCharacter”后添加节点“set door”,然后从这个“set”节点的引脚“Door”拉出一条线搜索“self”,获得一个对自身的引用

到此,蓝图“ThirdPersonCharacter”的变量“Door”就有“东西”了

 

“事件结束重叠时”,我们把引脚“Door”设置为空的(不连任何东西),离开之后按按键也没反应

切换到“ThirdPersonCharacter”蓝图,添加对变量“Door”的引用,“E”,“?is valid”,然后从“Door”拉出一条线添加节点“canopendoor(消息)

  

 

“ThirdPersonCharacter”蓝图类中新添的事件图表:

  

“Door_BP”中的事件图表:

  

  

  本节蓝图可以分为3个部分:

  1.使用蓝图接口控制门的旋转

  2.“ThirdPersonCharacter”中 按键激活接口

  3.碰撞盒子用于传参 self参数传给小白人(弹幕大佬的总结)

(蓝图接口的实际应用:比如PUBG这个游戏,只有当人物靠近门并且看向门的时候,才可以开门(靠近门但是背对着门或者不看向门则开不了门);如果使用的是触发盒子,那么人物站在触发盒子里 不管视角如何都能开门,这时就要用到 蓝图接口 + 射线检测 来实现PUBG中那样的开门的逻辑)

 

  • P52. 射线检测的计算方式

 (需要先在新项目的"content"文件夹里导入两个文件:Materials 和 WeaponProM4A1)

在内容浏览器中,打开“内容——FirstPersonBP——Maps”下的“FirstPersonExampleMap”地图

在“世界大纲视图”找到“FirstPersonCharacter”,点击右侧的“编辑FirstPersonCharacter”,以打开此蓝图

在左下角“我的蓝图”新建一个图表,命名为“武器拾取功能”

添加节点“事件Tick”(每一帧都用射线检测判断周边有没有可互动的物体)、“由通道检测线条”(此节点中的引脚“start”和“end”就是一条线中的两个点);在“组件”中把“FirstPersonCamera”拖拽到图表里(玩家摄像机作为射线检测的起始点),从此节点拉一条线添加节点“获取场景位置”,然后连接“由通道检测线条”的引脚“start”;

切换到蓝图的视口界面,点击一次“组件”中的“FirstPersonCamera”,在“细节——变换——位置”中,把X和Y的相对位置改成0

  

切换到“武器拾取功能”图表,从节点“FirstPersonCamera”拉出一条线添加节点“获取向前向量”,从此节点添加节点“向量*浮点”(乘数改成500);节点“向量+向量”(把“获取场景位置”和改变大小之后的“获取向前向量”加起来,然后连到“由通道检测线条”的引脚“end”)

(节点“由通道检测线条”的引脚“draw debug type”,可以打开或关闭射线(针对一帧:每帧都有射线,射线不会被保留;针对时长:每帧都有射线,射线会被保留一段时间,过后清除(按时间顺序);持久:每帧都有射线且射线会被保留)(trace color:射线的颜色;trace hit color:射线打到物体后的颜色;draw time:射线保留时间))

当前图表的连线情况(这节课):

  

 

  • P53. 碰撞设置、蓝图接口

 (接上一P)

在 默认编辑界面,点击工具栏中的“设置——项目设置”,在新界面中点击左侧的“引擎——碰撞”,在“Trace Channels”中点击“新建检测通道...”,命名“PickUp”,默认响应“Ignore”(为什么默认响应不设置“Block”:默认值设置成忽略,我们只需要针对我们互动的物体,把对应的通道设置成阻挡的即可;如果默认值设置成阻挡,那么场景中的所有东西都会在完善功能之后变成“可拾取”)。

在内容浏览器中创建文件夹“可拾取的物品”(在“内容”下创建即可,不必依附于其他文件夹),在此文件夹中 右键“蓝图类”,然后选择“actor”,命名为“PickUp_BP”,打开此蓝图类。

切换到 内容浏览器,在路径“内容——WeaponProM4A1——Weapons——M4A1——Meshes”,单击“SK_WP_M4A1_Yellow”(点一下就行),切换到“PickUp_BP”蓝图类编辑界面,在左上角的“组件”中,选择“添加组件——骨骼网格体组件(SK_WP_M4A1_Yellow)”。

在“组件”列表中单击新添加进来的 骨骼网格体组件,在“细节——碰撞——碰撞预设”选择“Custom...”,“碰撞已启用”选择“已启用碰撞(查询和物理)”,把“碰撞响应”中的“PickUp”设置成“阻挡

  

切换到默认的编辑界面,在“可拾取的物品”文件夹中,右键“蓝图(不是蓝图类)——蓝图接口”,命名为“PickUp_Interface”,然后打开。

把右上角的“我的蓝图”中的函数重命名为“PickUp”(打开时有个默认的新函数,把那个函数重命名就好),再创建两个函数“SetCustomDepthOpen”和“SetCustomDepthClose”(描边效果的开关)。

切换到“PickUp_BP”的蓝图类,点击工具栏的“类设置”,然后“细节——接口——添加”,找到刚才新建的蓝图接口“PickUp_Interface”然后添加进去。

 

在“PickUp_BP”蓝图类 新建图表“Interaction”,在新的图表中右键搜索在蓝图接口中创建的3个函数的名字(PickUp,SetCustomDepthOpen,SetCustomDepthClose),分别添加对应的“添加事件”:

  

切换到“FirstPersonCharacter”的蓝图类,从节点“又通道检测线条”的引脚“Out Hit”拉出一条线,添加节点“中断命中结果”(这里面是射线碰到的物体的一些信息)

——————————————分割线——————————————

(Up说不做描边检测了,改成F键拾取物体)

还是在“FirstPersonCharacter”的蓝图类、“武器拾取功能”图表,把节点“事件Tick”换成“F”(键盘F)从节点“中断命中结果”的引脚“Hit Actor”拉出一条线添加节点“Pick Up(消息)”,节点“Pick Up(消息)”的前端执行连接节点“由通道检测线条”的后端执行(就是射线命中物体之后,发出一条 PickUp 的消息)

  • 骨骼网格体设置碰撞

 切换到 默认编辑界面,在内容浏览器中,找到路径“内容——WeaponProM4A1——Weapons——M4A1——Meshes”,右键“SK_WP_M4A1_Yellow”,选择“创建——物理资产——创建”,不调设置直接点 创建资产

创建之后会直接打开此资产,把胶囊体一样形状的碰撞的大小调整到包裹住枪械模型:

  

 

回到 默认编辑界面,发现多了一个橙色的物理资产;双击打开“SK_WP_M4A1_Yellow”,然后回到 默认编辑界面 单击这个橙色的物理资产,然后再回到刚才打开的“SK_WP_M4A1_Yellow”的界面,在左侧的“资产详情——物理——物理资产”,单击向左的箭头,就可以把刚才选中的橙色的物理资产应用到这里了:

    

之后切换到“FirstPersonCharacter”的蓝图类的“武器拾取功能”图表,把节点“由通道检测线条”的引脚“Trace Channel”更改为“PickUp”(Trace Channel的默认值为Visibility,而蓝图类“PickUp_BP”中的组件M4A1的碰撞响应里,Visibility的碰撞响应为“忽略”,PickUp为“阻挡”,所以这里选“PickUp”)

  

到此,骨骼网格体设置碰撞 完成。

现在试试把“Pick_BP”放入场景中,我们对着它按F看看有什么反应:

  

射线检测穿过枪时,线条变为绿色;并且左上角有“Hello”打印(在蓝图类“PickBp_BP”的“Interaction”图表中,节点“事件PickUp”后连接了一个打印节点,用于测试)。所以功能成功了。

 

切换到蓝图类“PickUp_BP”,节点“事件PickUp”后添加节点“销毁Actor”(拾取之后销毁)

事件图表的连线图:

  “FirstPersonCharacter”蓝图的“武器拾取功能”图表:

  

  “PickUp_BP”蓝图的“Interaction”图表:

  

(做的不完整,这几期视频就只讲了武器拾取销毁(射线检测),没有射线打到物体然后描边的功能)

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

posted @ 2022-11-18 16:42  我会变强的  阅读(1267)  评论(0编辑  收藏  举报