В настоящее время я работаю над практическим проектом, который предусматривает укладку блоков. Это похоже на игру штабелеров (аркадная игра), за исключением того, что моя версия использует движение свободной формы вместо движения на основе сетки.Результаты Unity Raycast2D не ожидаются?
У меня есть 3 сборника для блоков: SingleBlock, DoubleBlock, TripleBlock.
Я структурировал каждый из них следующим образом: родитель представляет собой пустой объект игры с моим MovementScript
, который перемещает их влево/вправо, а дети - это блок-спрайт с BoxCollider2D
.
The MovementScript привязан к пустующему игровому объекту (родительскому), так что набор блоков перемещается равномерно влево/вправо, для чего он стоит.
Для фактической логики стекирования я использую Raycast2D, чтобы определить, есть ли блок ниже. Но проблема в том, что результаты, которые я получаю, являются неожиданными.
Вот фрагмент моего текущего кода:
foreach(Transform t in currentBlockSet.transform)
{
// get all the children of this blockset. to do this, we use the transform beause it is IEnumerable
GameObject block = t.gameObject;
RaycastHit2D hit = Physics2D.Raycast(block.transform.position, Vector3.down, rayCastLength); // 0.5f raycast length
//Debug.DrawRay(block.transform.position, Vector3.down * rayCastLength);
if(hit.collider != null)
{
// this means there is a block below, we hit something
Debug.Log("True");
}
else
{
Debug.Log("False");
}
}
Этот код называется каждый раз, когда игрок останавливает текущий Blockset, который движется по пути.
Проблема в том, что я всегда получаю true
в своих журналах, хотя я намеренно не выровнял блок правильно. Я никогда не получаю false
, даже если я ухожу с моим выравниванием. Почему это так?
Я действительно хотел бы упомянуть, что на сцене больше ничего нет. Это всего лишь блоки, поэтому не может быть другого объекта, с которым можно столкнуться.
Есть ли что-то не так с логикой или как я использую Raycast2D
?
Цените любую помощь.
Попробуйте увеличить 'rayCastLength'. Также измените 'Vector3.down' на' -Vector2.up' –