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”图表:
(做的不完整,这几期视频就只讲了武器拾取销毁(射线检测),没有射线打到物体然后描边的功能)
(〃>_<;〃)(〃>_<;〃)(〃>_<;〃)
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
· 25岁的心里话