Raycast не поражает объекты - PullRequest
1 голос
/ 02 июля 2019

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

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

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

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);
            }
        }
    }
}

Ответы [ 2 ]

2 голосов
/ 02 июля 2019

Вы смешиваете 3D и 2D физику; Physics будет искать только 3d-объекты, поэтому вы должны использовать Physics2D. Эта лучевая трансляция может все еще потерпеть неудачу, если приведение начинается внутри цели, потому что нормали поверхности указывают в неправильном направлении.

Также обратите внимание, что, поскольку у вас уже есть Collision2D, вы можете просто взять otherCollider, и вам не нужно сначала отправлять лучи.

0 голосов
/ 02 июля 2019

Physics.Raycast не работает с 2D-объектами. Вместо этого вам нужно использовать Physics2D.Raycast или Graphic Raycaster.

Raycast2D - https://docs.unity3d.com/ScriptReference/Physics2D.Raycast.html

Графический Raycaster - https://docs.unity3d.com/eng/current/Manual/script-GraphicRaycaster.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...