![image]()
这里开关灯效果主要实现方式是通过SphereTraceByChannel(球形投射碰撞检测),来获取角色前面指定范围内的Actor,并调用Actor的Interact蓝图接口,这里给ActorLight添加Interact蓝图接口后,并连线到ToggleLight事件,即可在通过球形碰撞检测事件后触发开关灯事件
![image]()
1. 创建一个蓝图接口
![image]()
改个名字BPI_Interactable
![image]()
设置第一个接口函数为Interact(就是把默认的NewFunction改个名)
![image]()
这里除了改名和新增接口函数,基本什么都干不了(不能添加实现)
![image]()
再添加一个有返回值的接口函数GetState
![image]()
2. 创建一个TV
创建基于Actor的蓝图
![image]()
并改名为BP_TV
![image]()
添加一个StaticMesh并拖放到根节点
![image]()
添加一个成员变量IsOn用来保存电视机当前的开关状态
![image]()
在Class Settings中添加刚创建的蓝图接口BPI_Interactable
![image]()
双击打开GetState接口并添加蓝图实现,并将IsOn作为接口返回
![image]()
双击打开另外一个接口函数Interact并添加蓝图实现(这里会自动打开事件图表Event Graph,没有返回值的接口即事件)
![image]()
准备一个图片作为电视机画面放到Contents目录
![image]()
回到编辑器注意点Import导入这张图
![image]()
基于这张图片创建一个纹理
![image]()
将贴图连线改到自发光Emissive Color
![image]()
回到BP_TV蓝图,完善Interact事件,跟随开关切换不同纹理
![image]()
拖一个电视到地图
![image]()
这里我改了下纹理,为了和开关区分一下
![image]()
3. 添加输入映射,用按键控制开关
打开项目设置(输入映射在项目设置里)
![image]()
![image]()
创建一个基于BP_ThirdPersonCharacter的自定义角色BP_MyChar(这里需要预先导入第三人称资源包)
![image]()
打开BP_MyChar添加刚才添加的Interact按键映射
![image]()
随便打印个字符串用于验证
![image]()
修改当前地图Default Pawn Class
![image]()
运行测试(注意需要按一下F键测试)
![image]()
4. 利用Trace函数,获取角色面前的对象(以便调用开关功能)
在前面的角色蓝图BP_MyChar中添加一个SphereTraceByChannel(球形投射碰撞检测函数)
![image]()
Start投射起点,End投射终点,Radius球形半径,Draw Debug Type投射显示类型(这里可以设置为For Duration,即显示投射线框并保持一段时间)
![image]()
这里用角色当前位置作为投射起点,当前位置向前方向+100单位作为投射终点
![image]()
运行测试(如果嫌不够粗,可以加Radius调整)
![image]()
添加交互逻辑
![image]()
Break Hit Result,里面包含需要交互的Actor
![image]()
连线Hit Actor,触发Interact事件
![image]()
完整蓝图连线
![image]()
运行测试(这电视勉强还能看)
![image]()
5. 给灯也安排一个Interact
打开BP_Light添加BPI_Interactable蓝图接口
![image]()
双击添加Interact事件,并连线ToggleLight事件
![image]()
上一节灯的外形看不清,这里我们换一个好观察的网格体
![image]()
为了让圆柱子能够够到灯罩,我们把灯罩位置调低一点
![image]()
然后把柱子调粗一点
![image]()
运行看看(完美!)
![image]()
其它
posted @
2023-12-21 21:10
BuzzWeek
阅读(
186)
评论()
收藏
举报