Это похоже на игру Марио. Игрок прыгает и должен собрать некоторые предметы.
Проблема в том, что мой луч не сталкивается с коллайдерами ящиков с предметами.
Мне нужно, чтобы луч знал, чтобы я мог уничтожить нужный предмет, с которым столкнулся игрок.
void OnCollisionEnter2D(Collision2D colisor)
{
if ((colisor.gameObject.name == "floor" || colisor.gameObject.name == "floor2" || colisor.gameObject.name == "floor3"))
{
anim.SetBool("jump", false);
anim.SetFloat("speed", 0);
}
if (colisor.gameObject.name == "space(Clone)")
{
RaycastHit hit;
Ray ray = new Ray(player.position, transform.right);
Debug.Log("hit1");
if (Physics.Raycast(ray, out hit))
{
BoxCollider bc2d = hit.collider as BoxCollider;
Debug.Log("hit2");
if (bc2d != null)
{
Destroy(bc2d.gameObject);
}
}
}
}
также убедитесь, что ваша начальная точка не находится внутри другого коллайдера...





Physics.Raycast не работает с 2D-объектами. Вместо этого вам нужно использовать Physics2D.Raycast или Graphic Raycaster.
Raycast2D — https://docs.unity3d.com/ScriptReference/Physics2D.Raycast.html
Графический рейкастер — https://docs.unity3d.com/eng/current/Manual/script-GraphicRaycaster.html
Вы смешиваете 3D и 2D физику; Physics будет искать только 3D-объекты, поэтому вместо этого вы должны использовать Physics2D. Этот raycast все равно может не сработать, если приведение начинается внутри цели, потому что нормали поверхности указывают в неправильном направлении.
Также обратите внимание, что, поскольку у вас уже есть Collision2D, вы можете просто взять otherCollider и в первую очередь не нужно использовать raycast.
Мне было интересно, мог ли я только что сделать это... Спасибо, чувак.
Я почти уверен, что для этого есть дубликат, но
PhysicsнетPhysics2D