虚幻4 碰撞过滤

原创翻译,转载请注明出处。(http://blog.csdn.net/sinat_24229853/article/details/51090259
英文原文:https://www.unrealengine.com/blog/collision-filtering?lang=zh-CN

选择什么样的碰撞显然是非常重要的,但它可能会非常棘手,而且我们在开发虚幻4的过程中已经花了相当长的时间讨论。我们的系统可以一眼看上去有点复杂,但它是非常强大和一致的,所以我想给一点背景知识关于如何完成它。我们会谈论碰撞的不同反应,我们如何使用通道来过滤碰撞,和勾勒出简单和复杂碰撞体之间的不同。

阻塞(Blocking)、重叠(Overlapping)和忽略(Ignoring)
首先你要知道的是,当你谈论一些事应该发生碰撞,你必须选择是否可以穿透(penetrate)它。一面砖墙会阻塞一个玩家,但一个触发器(trigger)会使它们重叠,允许它们重叠。它们都会产生一个事件(在UE4中的术语分别为击中(Hit)或重叠(Overlap)),不过这是一个重要的差别。而其它对象可以忽略互相碰撞。这给了我们三种不同的碰撞类型。

追踪通道和对象通道
下一个大问题碰撞过滤的核心:“该选择谁?”是物体决定了什么类型的查询来碰撞?还是查询决定了查找什么类型的对象?在不同的情况下,它们都是合理的,所以UE4都支持!

想象一下我们在我们的游戏中定义了两个“追踪通道”,一个是“可见性”,一个是“武器”查询。一面砖墙是用来阻塞它们,一个灌木阻塞“可见性”但是不阻塞“武器”,一个防弹玻璃阻塞“武器”但是不阻塞“可见性”。当你做这种查询,你指定了单个追踪通道。

这里写图片描述

如果我们对此改变了,因此游戏代码必须知道什么对象类型用来查询,我们游戏可能需要大量的不同类型来处理所有这些场景!它也允许我们之后在内容做“现场修复”,而不是修改调用代码本身和破坏其它的东西。

然而有一些情况下,你想做仅仅基于它们类型的对象查询,这就是我们用的对象通道。一个例子是一个爆炸发生,你想快速查找在一定半径内的“Pawn”或“PhysicsBody”类型的所有对象。当你做这种类型的查询时,你可以指定多对象通道。

UE4有一些“内置”追踪通道(可见性,摄像机)和对象通道(世界静态、世界动态、Pawn、PhysicsBody、Vehicle、可破坏),但是你可以简单地通过编辑->项目设置->碰撞添加你自己的通道,尽管你被限制在32个通道总数内。

运动对象间的碰撞
当你想处理移动对象的时候,事情变得有一点复杂。因为这里有很多种组合。在UE4,每个对象知道它自己的对象通道,添加一个列表关于如何响应其它对象通道。当两个物体相交,我们着眼于他们如何互相响应,和采取最小阻塞(least blocking)交互,如下图所示:

这里写图片描述

所以想象下面的场景:

这里写图片描述

现在这个角色向前移动。首先它会与灌木丛(Shrub)重叠。玩家是Pawn类型,并且灌木丛想要与它重叠。Shrub是世界静态(WorldStatic)类型,并且玩家想要阻塞它。检查上面那个表格,最终的结果是重叠!同样的,砖墙和玩家都想阻塞对方,所以玩家走过灌木丛(产生重叠事件)和它会被墙截停(产生击中事件)。

这里写图片描述

如果你有两个玩家,并且一个想变成“幽灵”,你可以让它到Pawn的响应频道从Block改为Ignore,然后他会穿透其它玩家。

碰撞预设
虽然这个系统给了大量控制关于你的场景中的对象如何与其它对象碰撞,实际上大多数对象在使用共同的配置。为了让事情更简单,UE4有一个“碰撞预设”系统。每个预设包含了一个对象类型,和在你的游戏中的对于每个追踪和对象通道的一个响应。当你选择场景中的一个对象,你会看到一个简单的下拉菜单,允许你选择一个预设:

这里写图片描述

UE4有几种内置通道(例如不可见墙,物理Actor等等),并且你可以在项目设置创建自己的通道。如果你不想使用预设,你可以选择“自定义…”然后你可以修改每一个响应,像我们如下谈论的:

这里写图片描述

简单和复杂碰撞
最后一件事要理解的是:UE4中的每个对象都有“复杂”和“简单”碰撞表示。复杂的碰撞指使用实际的渲染几何体碰撞。这对于武器追踪来说是最有用的东西,你可以射击你能看得到的东西。尽管你不总是想要碰撞这个,并且每个网格也可以有简单碰撞表现,其由球体、盒子、胶囊体和凸外壳集合组成。当你执行碰撞查询,你告诉UE4你想要碰撞的几何体。例如,角色移动,使用简单几何体碰撞,来避免在细节上的卡住。

编辑器那里有一个方便的查看模式,让你看见作为一个角色会碰撞的东西:

这里写图片描述

这里写图片描述

总结
这里已经是全部内容,碰撞过滤是一个令人沉醉的世界!我希望它有助于了解一些我们试图解决和如何利用它来用到你自己的游戏中。有任何疑问或评论?我们总是在论坛或者你可以在推特联系我@EpicJamesG

*我们实际上在第一个阻塞碰撞发生后停止继续查找碰撞,这是一个很好的性能优化——想象开了一枪范围可达1km的子弹打中了距离你1m的墙,我们省去了999米的工作!

  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值