本文主要是介绍UE5 中的碰撞问题,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
文章目录
- 一、初始准备
- 二、重叠和碰撞
- 三、自定义碰撞
![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/752dc5eec2f2478a8bd600b0e6c2f185.gif)
一、初始准备
首先我们创建一个 BP_ThirdPerson 项目,然后在项目中创建两个 Actor 的蓝图 Blueprint
首先是一个移动的 BP_Push,这里使用 time line 循环旋转 cube 的相对位置
![](https://img-blog.csdnimg.cn/direct/10bdc354a88847ebbedf653a642e5fd5.png)
得到效果如下
![](https://img-blog.csdnimg.cn/direct/d41b05fc41ec4e5ebfdf0f983a3c2301.gif)
然后是一个旋转的 BP_Rotation,这里同样使用了 time line 来更新旋转角度
![](https://img-blog.csdnimg.cn/direct/b7a4089315c8421f91aaf7a634dc40fd.png)
得到效果如下
![](https://img-blog.csdnimg.cn/direct/a100d9de94cf4dcc8440f6c93b580197.gif)
有了这两个 Actor 的 Blueprint 接下来深度了解碰撞
二、重叠和碰撞
首先,Character 只会在其运动的时候计算 Collision,目的是为了节省资源和性能消耗。如果 Character 静止而 Static Mesh 与 Character 发生碰撞的时候,就会导致 Character 被推来推去
所以第一步我们需要做的是将 Character 在每一帧保持运动状态,实现效果如下
![](https://img-blog.csdnimg.cn/direct/2c9af2b08f024f7f8adbd33c88bc9e02.png)
这样 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 有关
![](https://img-blog.csdnimg.cn/direct/0dfc28b478a9450293e559c22622cfbe.png)
这里要注意的是,Generate Overlap Events 是默认开启的,而如果需要使用 Event Overlap,必须两个对象都开启 Generate Overlap Events 才行。
如果两个 Collision Presets 出现了冲突,即一个为 Ignore 或者 Overlap ,另一个为 Overlap 或者 Block,其状态为 Ignore 或者 Overlap,以最左边的为准
注意:这里如果出现了 Collision ,先检查 Collision Presets 是不是不止一个
三、自定义碰撞
我们可以去 Project Setting 中 创建一个自定义的 custom collision channel
![](https://img-blog.csdnimg.cn/direct/6673ea7f8c8a4952831d574aed6b0d32.png)
通过在 Collision Presets 中设置 Object Type 和 Object Response 可以轻松的控制玩家和敌人对道具拾取的问题
![](https://img-blog.csdnimg.cn/direct/c996e50d9a7345668b259f2057e8b52e.png)
这篇关于UE5 中的碰撞问题的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!