2022-10-02 / 08 再编辑

关键词:蓝图类 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 InputDisable 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 CursorEnable Click EventsEnable Touch Events。因为我们无法修改默认玩家控制器的设置,只能新增一个改啦。

你可能感兴趣的:(2022-10-02 / 08 再编辑)