【问题标题】:Unity: opaque area of image should be a collider, transparent area should notunity:图像的不透明区域应该是碰撞器,透明区域不应该
【发布时间】:2021-06-07 21:43:42
【问题描述】:

我相当肯定我会搜索所有可能的答案,所以如果某处有答案,请原谅我......

我有一堆 (35) 图像,它们按程序组装成一个“迷宫”。 “玩家”对象被放置在屏幕上的随机位置,我应该避开可碰撞的空间。 “迷宫”图像是 2D 的,带有一些不透明区域(白色)和透明区域(蓝色)。在 Unity 中,所有图像都有使用 Composite 的多边形对撞机...所有这些都可以完美运行,除了...

我的问题是多边形对撞机使用轮廓或多边形,但介于两者之间的一切都不是对撞机。这意味着,除非玩家撞到碰撞器的边缘之一,否则它不会记录实际的碰撞。

为了更好地理解这一点,请查看图片。当我希望该区域成为对撞机时,玩家将在图像的不透明区域生成。

顺便说一句,不使用 Composite 会产生同样的问题,玩家对象会在多边形边缘之间生成。

知道如何使整个不透明区域成为对撞机吗?

【问题讨论】:

    标签: unity3d 2d collision-detection


    【解决方案1】:

    您可以使用 void OnCollisionStay2D(Collision2D collision) 方法检查您想要处理测试的任何对象是否在碰撞器中发生碰撞。

    但是,如果您尝试使用对撞机来确定一个区域是否可以安全生成,您可能需要使用collider.bounds.Contains(player.transform.position)(或您想要的任何位置)检查生成点是否在对撞机内检查)。

    查看文档了解更多信息:https://docs.unity3d.com/ScriptReference/Bounds.Contains.html

    【讨论】:

    • 我已经成功地进行了对撞机检查,尽管使用多边形对撞机唯一的碰撞“区域”是边缘。我将检查 Bounds.Contains 技术。谢谢!
    • 您确定使用OnCollisionStay2D 来检测碰撞区域内的碰撞吗?我刚刚对其进行了测试,它可以很好地记录碰撞,而无需触摸碰撞器边缘。
    • 我已经尝试过,但它对我不起作用,但我可能有一个可变的通信问题,这会导致问题。我正在做一些额外的测试,当我知道更多时我会回到这里。
    • 我还想知道这是否是基于所有对撞机(迷宫和玩家)都在实例化并且没有正确调用某些东西的事实而发生的问题。
    猜你喜欢
    • 2016-03-29
    • 1970-01-01
    • 2013-04-28
    • 1970-01-01
    • 2013-08-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多