如何在Unity2D中进行网格捕捉时检查gameObject

时间:2019-05-19 00:44:12

标签: unity3d grid drag snapping

我正在尝试制作一款允许通过将对象捕捉到网格上来移动对象的游戏,我已经想出了将它们捕捉到网格上的方法,但是有一点点小问题,我想检查是否已经放置了游戏对象在同一网格上,这样我就不会让拖动的游戏对象捕捉到相同的位置,但事实是我有不同的游戏对象形状。

亲自看看

Click to see the image

我该如何实现?

2 个答案:

答案 0 :(得分:0)

由于您位于正方形网格上,所以我认为最好的方法是使用Physics2D.Boxcast()。基本上,您要做的是在移动游戏对象之前在捕捉矢量处投射一个框。

因此,在代码中,将游戏对象移动到捕捉位置之前,

RaycastHit2D hit = Physics2D.BoxCast(snapTo, boxSize, 0.0f, Vector2.zero);
if (hit == null)
{
    // We're clear to move
}
else
{
    // Something is in the way
}

其中snapTo是要捕捉到的位置的Vector2,而boxSizeVector2,等于一个网格位置的大小(您可能会需要稍微玩一下)。最后两个参数0.0f指的是盒子的角度,我们不需要将其设置为零,而Vector2.zero是投射的方向,但是我们将其投射为一个点,所以这也没关系。

我假设一次只有一个游戏对象可以占据该空间,所以将只有一次命中。如果有多个机会,可以将其更改为RaycastHit2D[] hitsPhysics2D.BoxCastAll,然后检查hits.Length是否大于0。

答案 1 :(得分:0)

我在使用 Physics2D.Boxcast()时遇到了一些麻烦,所以我改用了 Physics2D.OverlapBox(),并且运行正常。

isColl = Physics2D.OverlapBox(ObjectToMove.position, size, 0f, layerM);
                if (isColl == true)
                {
                    // Something is in the way
                }
                else
                {
                    //Clear to go
                }