关键词:
蓝图类
Actor
世界坐标
相对坐标
Collision
Prerequisite
完成自动开关门(详细见上一篇)
目标:集合所有开关门类的逻辑,帮助我们后期快速创建一个门
- 新建 Actor (蓝图类),增加组件:门框、门、触发盒子。
- 将开关门蓝图逻辑,放入其中,后续拖拽使用。
1. 创建 Actor
- “内容浏览器” 中 右击打开 “新建 BluePrint class” -> “Actor”。
- 重命名该 Actor 类为 “Door_BP”,双击打开。
- 有关 Actor 理解:Actor本身相当于一个身体,往其上添加组件Component(相当于穿衣戴帽,或者像给爱车换高档座位一样)
2. 添加组件:(门框 | 门) | 碰撞盒子
- Static Mesh 组件:门框 DoorFrame、门 Door
- 理解:Static Mesh 静态网格组件,可指代模型,门和门框都是静态网格组件。
// Actor 结构如下
- Defined
- DoorFrame
- Door
- Box Collision
3. 添加自动开关门逻辑
不同:触发盒子 Trigger Box ,这里组件是碰撞盒子 Box Collision
- 世界坐标是恒定的,是相对自身当前位置的旋转。
- 三类旋转的区别:setActorRotation 整个蓝图类进行旋转; 蓝图中的个体:setRelativeRotation; setWorldRotation。
- 相对于门,我们的 actor(相对于世界位置中的旋转 vs 相对于actor自身的旋转),所以使用
setRelativeRotation
。
4. 替换为按键 Q 进行开门
按键进行开关门:按键 Q
- 增加节点流程控制 - Gate
(Enter Open Close Toggle Exit)
- 理解:Gate 相当于一把锁,Enter开锁,Open 可开锁状态,Close 不可开锁状态。
- 问题:蓝图连接好,但到达 Box Collision 触发范围后,按键 Q 开门不生效
- 解决:新增 3 个新节点,分别是(
Enable Input
、Disable Input
)和 作为 target 的(get player controller)玩家控制器。因为按键要响应,需要先通过节点开启玩家控制器的按键输入。
5. 添加节点 流程控制 - Flip Flop
正反器,实现开关门
- Gate 节点 (「Exit) - 连接新增的节点
Flip Flop
(」「正) - 时间轴(Play」「开关门轨迹) - setRelativeRotation(z轴)。 - Gate 节点 (「Exit) - 节点
Flip Flop
(」「反) - 时间轴(Reverse」)。
6. 增加鼠标点击进行开关门
添加点击事件:给组件 Door 添加 on clicked 事件
- 问题:添加点击事件后,演示时进入碰撞范围,无鼠标出现。
- 原因:需要给 PlayerController 勾选开启 显示鼠标 / 允许点击 等选项(默认是关闭的)。
- 解决:开启玩家可点击模式。在 “世界设置” 中新增玩家控制器 -
NewPlayerController
,勾选选项Show Mouse Cursor
,Enable Click Events
和Enable Touch Events
。因为我们无法修改默认玩家控制器的设置,只能新增一个改啦。