0

编辑:这是一个相当简单的问题。我有一个真正需要多边形碰撞框精度的 2D 精灵。出于效率原因,其周围基于瓦片的 2D 世界使用瓦片 Mesh,因此具有 Mesh Collider。

以前,世界上的瓷砖都是带有 Box Colliders 和 Rigidbody 2D 的 GameObjects,船和瓷砖碰撞得很好。但是,现在我使用的是 Mesh Collider,它们不能发生碰撞。(我已经读过这是因为一个是 2D,一个是 3D。)那么我应该怎么做才能让多边形船和 2D 瓦片网格之间发生碰撞(最好是刚体物理)?[结束编辑]

在一个 2D、基于图块、程序生成、基于块的探索游戏中(在 Unity 4.5 中),我有一艘玩家飞船,它使用 2D 刚体和 2D 多边形对撞机进行碰撞检测。
当我将 Rigidbody 2D / Box Collider 2D 用于世界图块时,这效果很好。但是,这非常慢,所以我使用 Mesh Collider 和其他相关用具将离散块替换为 tile 网格。

问题是:我根本无法让碰撞检测工作。我在 xy 平面上有瓷砖,碰撞网格(我可以在场景视图中看到它,所以我知道它有效)由四个垂直于瓷砖的矩形组成。(如果你无法想象这一点,我不怪你。看这里。)

到目前为止我看到了什么?好吧,我验证了(2D)船实际上通过了场景视图中的碰撞框。此外,这两个对撞机都不是“触发”。
由于似乎没有关于如何实际使用网格的官方文档(有吗?在哪里?),我无法确定 Mesh Colliders 和 Polygon Colliders 是否真的可以交互。因为一个是 2D,一个是 3D,这不起作用吗?如果是这样,那我应该怎么做呢?我尝试为船使用 Box Collider [3D],但这也不起作用。不过,我可能在这里犯了一个错误。

我是否应该手动处理碰撞(使用 OnCollisionEntered [或其他] 方法)?以前,rigidbody2D 对象会自动处理所有内容。否则,是否还有其他可能的原因碰撞可能不起作用?

4

2 回答 2

1

好吧,我很失望在 Unity 中似乎没有内置的方法可以做到这一点。我的解决方案是将一个 GameObject 附加到玩家,它将从世界中读取块数据并在玩家周围的一个小区域中使用 Box Colliders 2D 创建(当然是池化的)真实但不可见的“碰撞块”,这样玩家可能会与附近的方块发生碰撞。它工作得很好,我还实现了一个算法来在块组上生成矩形碰撞块;这消除了 2D 物理引擎中的“幽灵像素”错误。

于 2014-08-08T15:46:19.000 回答
0

Uni2D 插件 ( https://www.assetstore.unity3d.com/en/#!/content/3826 ) 自动从任何具有透明度的 2 个纹理创建 3d 碰撞器(作为一组网格碰撞器)。有点贵但有效。

于 2016-12-09T08:09:42.483 回答