我正在尝试制作一个允许通过将对象捕捉到网格上来移动对象的游戏,我已经想办法将它们捕捉到网格但是有一个小问题,我想检查是否已经有一个游戏对象放置在同一个网格,这样我就不会让拖动的游戏对象捕捉到同一个位置,但问题是我有不同的游戏对象形状。
你自己看
我怎样才能做到这一点?
我在使用Physics2D.Boxcast()时遇到了一些麻烦,所以我使用了 Physics2D.OverlapBox()并且它工作得很好。
isColl = Physics2D.OverlapBox(ObjectToMove.position, size, 0f, layerM);
if (isColl == true)
{
// Something is in the way
}
else
{
//Clear to go
}
由于您在方形网格上,我认为最好的方法是使用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
boxSize
Vector2
0.0f
Vector2.zero
我假设一次只有一个游戏对象可以占据空间,所以只会有一次命中。如果有机会超过一个,您可以将其更改为RaycastHit2D[] hits
然后Physics2D.BoxCastAll
检查是否hits.Length
大于 0。