【UE5】连接射频线案例教程
效果
【虚幻5】连接射频线Demo演示案例
步骤
1. 新建一个工程,创建如下文件夹以及游戏模式、Pawn、HUD、玩家控制器,这里分别命名为“MyGameMode”、“MyHUD”、“MyPawn”、“MyPlayerController”
2. 在世界场景中设置关卡使用的游戏模式、Pawn、HUD、玩家控制器
3. 在文件夹“Textures”中准备如下素材
在文件夹“Mesh”中包含如下3个静态网格体
4. 先创建一个基于“StaticMeshComponent”的Actor组件,这里命名为“BPC_射频接口”
该组件就只设置了一个外观
5. 根据准备的Mesh创建对应的设备Actor
其中“BP_交换矩阵”中包含如下1个静态网格体组件,以及2个前面创建的“BPC_射频接口”组件,碰撞预设均为“BlockAllDynamic”
6. “BP_变频设备”组成和“BP_交换矩阵”一致,包含1个静态网格体组件,2个“BPC_射频接口”组件
7. “BP_射频线”由2个静态网格体和1个缆索组件组成
这里对缆索组件做了如下设置
8. 打开“MyPlayerController”,在事件图表中添加鼠标左键点击的逻辑
9. 其中,“射线检测”节点为蓝图函数库“BPL”中定义的方法如下所示。(“MyPlayerController”事件图表中涉及到的“BP_射频线”中的方法“开启拖拽”、“关闭拖拽”、“设置默认射频头材质”在后面叙述。)
10. 回到“BP_射频线”,在事件图表中添加如下节点
首先当鼠标悬浮在射频头时去修改鼠标样式
事件开始运行时获取玩家控制器引用
开启拖拽后,设置射频头材质,然后根据当前拖拽的是射频头1或2来执行“BP_射频线”整体拖拽还是局部拖拽。
自定义事件“整体拖拽”逻辑如下,发出射线判断射线碰撞到的是否是组件“BPC_射频接口”,如果是就设置“射频头1”的颜色为绿色,并且根据“射频接口”的位置和朝向来设置“射频头1”的位置和旋转。
“局部拖拽”的逻辑和“整体拖拽”基本一致,唯一区别就是拖拽的是“射频头2”
11. 创建用户控件如下
12. 其中“WBP_Main”为主界面,只包含“WBP_DragUI”
13. “WBP_DragUI”包含两个图像控件,一个显示背景,一个显示图标
背景用的是创建的用户界面材质“M_BtnUnChoosed”
材质“M_BtnUnChoosed”如下,(需要先设置材质域为用户界面,混合模式为半透明)
在“WBP_DragUI”中,重载函数“OnMouseButtonDown”,当鼠标按下时侦测鼠标左键是否拖动
重载函数“OnDragDetected”,当拖动时创建“WBP_ImageDragUI”
“WBP_ImageDragUI”只包含一个图像控件如下
在“WBP_DragUI”中,添加如下逻辑,当拖动结束后在鼠标位置创建射线检测,在射线碰撞位置创建“BP_射频线”
在鼠标进入/离开时修改背景图像为“M_BtnChoosed”/“M_BtnUnChoosed”
“M_BtnUnChoosed”材质节点如下
14. 打开“MyPawn”添加弹簧臂和摄像机组件
添加如下3个浮点类型变量,这里默认值分别为5、1、5
添加交互逻辑如下
鼠标右键点击射频线打开的菜单“WBP_RightBtnMenu”如下
“WBP_RightBtnMenu”被创建时需要传入一个参数“DeleteObject”,表示被删除的Actor对象
删除和关闭按钮的逻辑如下
15. 在“WBP_Main”中设置“WBP_DragUI”在视口中的大小和位置
16. 打开“MyHUD”,创建“WBP_Main”
最终运行效果如文章开头所示。