Странно, конечно, что у них двадэшное и тридэшное API так отличается, но при желании можно написать свою обёртку:
using UnityEngine;
public static class Physics2DUtility
{
public static bool Raycast(Ray2D ray, out RaycastHit2D hit)
{
hit = Physics2D.Raycast(ray.origin, ray.direction);
return hit.collider != null;
}
}
Касательно других объектов между преградой и источником рэйкаста, такие проблемы решаются с помощью масок. Просто засуньте все объекты преград в один слой, а потом используйте этот слой во время рэйкаста.