Raycast не попадает в объекты

Это похоже на игру Марио. Игрок прыгает и должен собрать некоторые предметы.

Проблема в том, что мой луч не сталкивается с коллайдерами ящиков с предметами.

Мне нужно, чтобы луч знал, чтобы я мог уничтожить нужный предмет, с которым столкнулся игрок.

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 нет Physics2D

Draco18s no longer trusts SE 02.07.2019 21:39

также убедитесь, что ваша начальная точка не находится внутри другого коллайдера...

BugFinder 02.07.2019 21:40
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
2
2
41
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

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.

Мне было интересно, мог ли я только что сделать это... Спасибо, чувак.

gustavo302 02.07.2019 21:45

Другие вопросы по теме