Как проверить наличие gameObject во время привязки к сетке в Unity2D - PullRequest
0 голосов
/ 19 мая 2019

Я пытаюсь создать игру, которая позволяет перемещать объекты, привязывая их к сетке, я уже решил привязать их к сетке, но есть одна небольшая проблема, я хочу проверить, есть ли уже размещенный игровой объектна той же сетке, чтобы я не позволил перетаскивающемуся игровому объекту привязываться к тому же месту, но дело в том, что у меня есть разные формы игрового объекта.

убедитесь сами

Нажмите, чтобы увидеть изображение

как мне этого добиться?

Ответы [ 2 ]

0 голосов
/ 20 мая 2019

У меня были некоторые проблемы с Physics2D.Boxcast () , поэтому вместо этого я использовал Physics2D.OverlapBox () , и он работает просто отлично.

isColl = Physics2D.OverlapBox(ObjectToMove.position, size, 0f, layerM);
                if (isColl == true)
                {
                    // Something is in the way
                }
                else
                {
                    //Clear to go
                } 
0 голосов
/ 20 мая 2019

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

...