文章目录
- 一、初始准备
- 二、重叠和碰撞
- 三、自定义碰撞
一、初始准备
首先我们创建一个 BP_ThirdPerson 项目,然后在项目中创建两个 Actor 的蓝图 Blueprint
首先是一个移动的 BP_Push,这里使用 time line 循环旋转 cube 的相对位置
得到效果如下
然后是一个旋转的 BP_Rotation,这里同样使用了 time line 来更新旋转角度
得到效果如下
有了这两个 Actor 的 Blueprint 接下来深度了解碰撞
二、重叠和碰撞
首先,Character 只会在其运动的时候计算 Collision,目的是为了节省资源和性能消耗。如果 Character 静止而 Static Mesh 与 Character 发生碰撞的时候,就会导致 Character 被推来推去
所以第一步我们需要做的是将 Character 在每一帧保持运动状态,实现效果如下
这样 Character 在每一帧中就会通过 更新位置
和 Sweep
来保持运动状态,在不操作的情况下也不会被碰撞弄得推来推去。Sweep
会在开始移动之前检查碰撞来判断是否能够移动到 Delta 的新位置(ignore, overlap)
关于碰撞的事件有两种,一种是 Event ActorBeginOverlap,一种是 Event Hit
Event ActorBeginOverlap ,与 Generate Overlap Events 有关,只有开启了 Generate Overlap Events 才可以使用 Event ActorBeginOverlap;然后是Event Hit,这个事件只与 Collision Presets 中的 Block 有关
这里要注意的是,Generate Overlap Events 是默认开启的,而如果需要使用 Event Overlap,必须两个对象都开启 Generate Overlap Events 才行。
如果两个 Collision Presets 出现了冲突,即一个为 Ignore 或者 Overlap ,另一个为 Overlap 或者 Block,其状态为 Ignore 或者 Overlap,以最左边的为准
注意:这里如果出现了 Collision ,先检查 Collision Presets 是不是不止一个
三、自定义碰撞
我们可以去 Project Setting 中 创建一个自定义的 custom collision channel
通过在 Collision Presets 中设置 Object Type 和 Object Response 可以轻松的控制玩家和敌人对道具拾取的问题