Unreal入门,开关02,通过蓝图接口开关电视

发布时间 2023-12-21 21:14:18作者: BuzzWeek

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

在Engine - Input下添加Interact按键映射并绑定到F键

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

5. 给灯也安排一个Interact

打开BP_Light添加BPI_Interactable蓝图接口

image

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

image

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

image

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

image

然后把柱子调粗一点

image

运行看看(完美!)

image

其它