Поскольку вы находитесь на квадратной сетке, я думаю, что лучший способ сделать это с помощью 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.