智慧 + 毅力 = 无所不能

正确性、健壮性、可靠性、效率、易用性、可读性、可复用性、兼容性、可移植性...
随笔 - 991, 文章 - 0, 评论 - 27, 阅读 - 341万

导航

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

虚幻4中的碰撞设置

Posted on   Bill Yuan  阅读(9826)  评论(0编辑  收藏  举报

转自:http://www.52vr.com/article-758-1.html

大家都见过次世代游戏中的物理碰撞效果,非常精确和震撼,虚幻的物理模拟(Physics Simulation)是基于强大的 PhysX 3.3物理引擎,其碰撞计算、物理互动来源于此。虚幻4的碰撞选项卡如下所示。

要理解和灵活应用虚幻引擎提供的碰撞系统,需要搞明白以下两个基本概念:

  1. 物体类型(Object Type)
  2. 碰撞响应(Collision Responses)

物体类型Object Type是一个分类,一些响应同样碰撞效果的物体可以划分到同一个类中。比如地面,我们希望它对任何场景物体都阻碍(Block)(虚幻4.8把这个翻译为区块….),就是说任何物体和地面的碰撞都是地面阻止物体穿过自己(如果物体有速度的和地面碰撞,仅仅设置碰撞为block并不能产生反弹效果,需要结合物体模拟设置)。 
向项目中增加自定义Object Type的方法是编辑—项目设置—碰撞。

碰撞响应(Collision Responses)有三种:Ignore,Overlap,Block,译为忽略,重叠,区块(这个翻译为阻碍、阻挡更加易于理解)。

Block就是阻止物体穿过自己,当别的物体以一定速度撞上自己时,两者不会发生互相重叠的情况(需要两者都设置为Block),至于它们如何模拟物理反应(反弹效果),需要另外设置。 
碰撞响应设置为Block时,两物体发生碰撞的瞬间激活On Component Hit事件。

Overlap和Ignore都会让两个物体互相重叠、穿过。它们的区别是当设置为overlap时,两物体开始和结束overlap(重叠)时,可以激活事件ReceiveBeginOverlap and ReceiveEndOverlap。

当碰撞预设值(Collision Presets)设置为Custom时,可以自定义本物体对不同类的响应类型(大部分时候都是设置为custom)。 
比如自己是一个墙壁(Object Type为Wall),它对普通玩家的碰撞响应为Block,对无敌玩家的碰撞响应为overlap,对子弹的碰撞响应为ignore,则需要的设置如下:

结果就是Object Type为NormalPlayer的actor类蓝图(或者组件)无法穿过自己;Object Type为GreatPlayer的actor类蓝图(或者组件)可以穿过自己,但我们可以确切的得知它什么时候开始接触墙壁、什么时候离开墙壁;Object Type为Bullet的actor类蓝图(或者组件)可以穿过自己,不会激起任何事件触发。

需要注意的是,碰撞响应的设置是需要双方配合的。上面的例子中,不仅仅要设置Wall对其他类型的碰撞响应方式,还要设置其他类型对wall的碰撞响应方式。只有碰撞的两个物体都设置为对对方为Block时,才会真的产生block效果

下图是GreatPlayer的设置: 

上面的例子不一定合理,只是用来说明问题的。部分图片来自官方文档。

关于虚幻引擎碰撞模块的详细介绍可以参见官方文档,点击这里

(评论功能已被禁用)
编辑推荐:
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
阅读排行:
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· .NET周刊【3月第1期 2025-03-02】
· [AI/GPT/综述] AI Agent的设计模式综述
点击右上角即可分享
微信分享提示