如何实现门户网站的冲突检测?


12

例如,采用这种情况(对不起,我的绘画技巧很差): 图片

这是基于“门户”的,火柴人正在通过蓝色门户(链接到红色门户),但是有一堵墙阻止他在红色门户上。因此,他无法完全通过门户。

所以我的问题是:如何与他们进行物理/碰撞检测?我会切播放器吗?有没有办法链接它们?是否有任何物理引擎支持此操作?如果没有,我该怎么做?


据我所知,他们解释一些东西在门户网站1.开发商评
君主国


@ Byte56,谢谢,我更新了我的帖子。我认为应该对此进行更多说明:)
MiJyn

1
我认为您描述的情况在门户网站中非常罕见(如果曾经发生过),因为门户网站不是自由浮动的。它们被放置在墙壁上,并且仅放置在特定的墙壁上。我不记得可以放置门户的情况,但是由于门户另一端的阻塞而无法通过。我想您可以在过渡期间在两个位置创建播放器的临时副本。
MichaelHouse

2
@ Byte56:你一定记不得很多。我记得在门户1中已完成此操作。我似乎想起了一个粉碎区域,可以在其中使用门户以避免死亡。与门户附近的内容发生冲突是很常见的事,引擎很容易处理。
Nicol Bolas 2013年

Answers:


7

门户网站游戏由他们解决了这个问题的一个好方法:

播放器穿过源门户(蓝色),并且被视为伸出目标门户(橙色)。播放器将复制到目标门户,并逐步浏览。该游戏使用第二台摄像机和渲染纹理来渲染通过源门户查看时看到的图像。

但是,播放器在目标位置的副本不会与物理相互作用。它仅用于渲染目的。相反,它们在源门户的另一侧制作虚拟碰撞对象,并使玩家与之碰撞。这使物理学变得简单。

您只需要播放器可以达到的最大虚拟对象,而无需完全通过门户。一旦玩家完全通过门户,情况就会逆转。

图片说明:蓝色门户是源门户,橙色门户是目标门户。白色虚线框是虚拟碰撞对象,而真实框是渲染的对象。播放器(带有红点)仅与周围的对象进行交互。橙色门户网站上的对象将被完全忽略。

在此处输入图片说明


4
使用第二台摄像机并渲染到纹理 ”开发人员在门户网站1上的评论明确表示,他们使用渲染到纹理,因为这不能满足他们的需求(尤其是从其他门户网站看到门户网站时) )。取而代之的是,他们基本上将世界的某个版本转换到门户的另一侧,然后通过它进行重新渲染。
Nicol Bolas

哇,这几乎可以回答所有问题!我只是想知道,门户是否是一个内部有对象的洞?
MiJyn

6

这是我尝试做的方法。

当您在门户中时,物理引擎中将有两个播放器副本。每个副本都忽略位于门户另一侧的所有碰撞,然后将结果合并并将模拟结果应用于两个模型。

理想情况下,您应该为玩家的每半部分分别施加重力,但是只要将重力应用到玩家质心所在的传送门一侧,您就可以摆脱困境。

要忽略这些碰撞,您需要设置适当的体积,并测试其中是否有一个点。一个圆柱体(可能垂直拉伸)似乎是一个不错的选择。然后测试就像if (!collisionPoint.InsideCylinder(portal)) ProcessCollision(); else IgnoreCollision();

我相信大多数物理引擎都具有用于过滤物体可能与之碰撞的系统,因此应该可以使用标准物理引擎来实现。例如 http://bulletphysics.org/mediawiki-1.5.8/index.php/Collision_Filtering#Custom_collision_filtering

为了合并结果,最简单的选择可能是在两者之间添加某种不灵活的约束,然后由物理引擎处理。


嗯,好的,我该怎么做?我可以复制播放器,但除此之外,我一无所知。我将如何忽略对面的碰撞?我什至会合并结果?
MiJyn

我已经编辑了更多详细信息。
2013年

谢谢,我会考虑一下,等我把这个问题
弄清楚后再回答

非常感谢,您的回答和Virtlink回答了我的问题:)现在决定将“正确答案”设置为...
MiJyn

4

我将如何计算玩家跌倒的距离?

你为什么要 您无需计算玩家“下场”的距离;您会发现随着对象进行模拟,它会走多远。

我什至将如何连接门户?

从游戏内的角度来看,门户仅是精心设计的传送器,它会碰到碰撞,将可碰撞的物体变成不可碰撞的物体。当物体触摸门户时,它可能开始与另一侧的物体碰撞。当对象通过门户足够远时,您可以有效地将其传送到另一个,从而立即更改其位置和方向。

物理学只是正常地进行。


When an object touches the portal, it starts potentially colliding with things on the other side对,就是这样。我将如何使用物理引擎来做到这一点?我想这是我的问题:)
MiJyn 2013年

@MiJyn:您编写了可以做到这一点的物理引擎。Valve必须从根本上破坏 Source引擎,才能使Portal实际运行。没有任何商业或开源物理引擎自然可以做到这一点。尽管有Portal的流行,但为什么市场上没有大量的Portal克隆是有原因的。
Nicol Bolas

有趣的是,因为还有很多其他游戏的机制非常相似(甚至参见《我的世界》的TARDIS mod)。我敢肯定,一定有某种方法可以轻松做到这一点。
MiJyn 2013年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.