После информации в комментариях, я думаю, что подход с raycast может не работать, потому что слишком много коллайдеров.Также учтите, что если вы запустите радиопередачу ВНУТРИ коллайдера, радиопередача начнется сразу.
Так что лучшим вариантом будет использование границ коллайдера.
Учтите, что при таком подходе коллайдер должен находиться на одном и том жескрипт игрового объекта.
Установите коллайдер, который вы хотите проверить, в полях класса и передайте его в окне инспектора.
public BoxCollider2D_colliderToCheck;
Я разбил код на 2 секции.
1 Найти коллайдер
С его помощью вы можете найти коллайдер.
//get the collider
var collider = _colliderToCheck.GetComponent<BoxCollider2D>();
Если у вас есть больше коллайдеров, вы можете использовать такие теги.
BoxCollider2D _colliderToCheck = null;
var colliders = GetComponentsInChildren<BoxCollider2D>(true);
for (int i = 0; i < colliders.Length; i++)
if (colliders[i].transform.CompareTag("DesiredTag"))
_colliderToCheck = colliders[i];
2 Найдите границы
//get the extents
var yHalfExtents = collider.bounds.extents.y;
//get the center
var yCenter = collider.bounds.center.y;
//get the up border
float yUpper = transform.position.y + (yCenter + yHalfExtents);
//get the lower border
float yLower = transform.position.y + (yCenter - yHalfExtents);
Debug.Log("Upper border: " + yUpper );
Debug.Log("Lower border: " + yLower );
ПРЕДЫДУЩАЯ РЕЗЕРВНАЯ КОПИЯ
Из того, что я вижу, вы отправляете 2 лучевых трансляции: один идет вниз, а другой идет вверх, но источником являетсято же самое (t.position
).
Physics2D.Raycast - Unity Docs
Первое, что я хотел бы сделать, это попытаться изменить положение источника лучевой трансляции.
Это можно сделать, сделав это.
RaycastHit2D hit1 = Physics2D.Raycast(new Vector2(t.position.x, t.position.y-100), Vector2.up);
RaycastHit2D hit2 = Physics2D.Raycast(new Vector2(t.position.x, t.position.y+100), -Vector2.up);
if (hit1.collider != null && hit2.collider != null)
{
Debug.Log("Upper border: " + hit1.point.y);
Debug.Log("Lower border: " + hit2.point.y);
}