Unreal入门,开关02,通过蓝图接口开关电视
发布时间 2023-12-21 21:14:18作者: BuzzWeek
1. 创建一个蓝图接口

改个名字BPI_Interactable

设置第一个接口函数为Interact(就是把默认的NewFunction改个名)

这里除了改名和新增接口函数,基本什么都干不了(不能添加实现)

再添加一个有返回值的接口函数GetState

2. 创建一个TV
创建基于Actor的蓝图

并改名为BP_TV

添加一个StaticMesh并拖放到根节点

添加一个成员变量IsOn用来保存电视机当前的开关状态

在Class Settings中添加刚创建的蓝图接口BPI_Interactable

双击打开GetState接口并添加蓝图实现,并将IsOn作为接口返回

双击打开另外一个接口函数Interact并添加蓝图实现(这里会自动打开事件图表Event Graph,没有返回值的接口即事件)

准备一个图片作为电视机画面放到Contents目录

回到编辑器注意点Import导入这张图

基于这张图片创建一个纹理

将贴图连线改到自发光Emissive Color

回到BP_TV蓝图,完善Interact事件,跟随开关切换不同纹理

拖一个电视到地图

这里我改了下纹理,为了和开关区分一下

3. 添加输入映射,用按键控制开关
打开项目设置(输入映射在项目设置里)


创建一个基于BP_ThirdPersonCharacter的自定义角色BP_MyChar(这里需要预先导入第三人称资源包)

打开BP_MyChar添加刚才添加的Interact按键映射

随便打印个字符串用于验证

修改当前地图Default Pawn Class

运行测试(注意需要按一下F键测试)

4. 利用Trace函数,获取角色面前的对象(以便调用开关功能)
在前面的角色蓝图BP_MyChar中添加一个SphereTraceByChannel(球形投射碰撞检测函数)

Start投射起点,End投射终点,Radius球形半径,Draw Debug Type投射显示类型(这里可以设置为For Duration,即显示投射线框并保持一段时间)

这里用角色当前位置作为投射起点,当前位置向前方向+100单位作为投射终点

运行测试(如果嫌不够粗,可以加Radius调整)

添加交互逻辑

Break Hit Result,里面包含需要交互的Actor

连线Hit Actor,触发Interact事件

运行测试(这电视勉强还能看)

5. 给灯也安排一个Interact
打开BP_Light添加BPI_Interactable蓝图接口

双击添加Interact事件,并连线ToggleLight事件

上一节灯的外形看不清,这里我们换一个好观察的网格体

为了让圆柱子能够够到灯罩,我们把灯罩位置调低一点

然后把柱子调粗一点

运行看看(完美!)

其它