如何在 Unity 2D 中进行网格捕捉时检查游戏对象

How to check for gameObject while Grid Snaping in Unity2D

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

自己看看

Click to see the image

我怎样才能做到这一点?

由于您在正方形网格上,我认为最好的方法是使用 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 是您要捕捉到的位置的 Vector2boxSizeVector2 等于一个网格位置的大小(您可能需要稍微尝试一下)。最后两个参数,0.0f 指的是盒子的角度,我们不需要它,所以只需将它设置为零,Vector2.zero 是投射的方向,但我们投射在一个spot所以这个也无所谓

我假设一次只有一个游戏对象可以占据 space,所以只会有一次命中。如果有不止一个的机会,您可以将其更改为 RaycastHit2D[] hitsPhysics2D.BoxCastAll 然后检查 hits.Length 是否大于 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
                }