编辑:这是一个相当简单的问题。我有一个2D精灵,真正需要多边形命中框的精度。围绕它的2D,基于图块的世界出于效率原因使用了瓷砖网格,因此具有网格对撞机。
之前,世界上的瓷砖都是带有Box Colliders和Rigidbody 2D的GameObjects,船和瓷砖碰撞得很好。然而,现在我正在使用网格对撞机,它们不会发生碰撞。 (我已经读到这是因为一个是2D而一个是3D。)那么我应该怎样做才能在多边形船和2D瓷砖网之间进行碰撞(最好是刚体物理)? [end编辑]
在2D,基于图块,程序生成,基于块的探索游戏(在Unity 4.5中)中,我有一个玩家船,它使用刚体2D和多边形碰撞器2D进行碰撞检测。
当我使用Rigidbody 2D / Box Collider 2D世界瓷砖时,这种方法很好用。然而,这非常慢,所以我使用网格对撞机和其他相关设备替换了带有瓷砖网格的离散块。
问题是:我根本无法让碰撞检测工作。我在x-y平面上有瓷砖,而碰撞网格(我可以在场景视图中看到它,所以我知道它有效)由四个垂直于瓷砖的矩形组成。 (如果你无法想象这一点,我不会责怪你。见here。)
到目前为止我看了什么?好吧,我确认(2D)船实际上通过了场景视图中的碰撞盒。此外,两个碰撞器都没有“触发器”。
由于似乎没有关于如何实际使用网格的官方文档(在那里?在哪里?),我无法找到网格碰撞器和多边形碰撞器是否真的可以相互作用。因为一个是2D而一个是3D,这不起作用吗?如果是这样,那么我该怎么做呢?我尝试使用Box Collider [3D]作为船,但这也不起作用。不过,我可能在这里犯了一个错误。
我应该手动处理碰撞(使用OnCollisionEntered [或某种方法])?之前,rigidbody2D对象自动处理所有内容。否则,碰撞可能不起作用还有其他可能的原因吗?
答案 0 :(得分:1)
嗯,我很失望在Unity中似乎没有内置方法可以做到这一点。我的解决方案是将一个GameObject附加到播放器上,该播放器将从世界中读取块数据并在玩家周围的小区域中创建(当然合并)真实但不可见的“碰撞器块”与Box Colliders 2D,以便播放器可能会碰到附近的街区。它工作得很好,我还实现了一种算法,在块组上产生矩形对撞块;这消除了2D物理引擎中的“鬼像素”错误。
答案 1 :(得分:0)
Uni2D插件(https://www.assetstore.unity3d.com/en/#!/content/3826)从任何具有透明度的2个纹理自动创建3D对撞机(作为一组网格对撞机)。有点贵,但有效。