Unity - raycast явно сталкивается, но не работает? - PullRequest
1 голос
/ 09 марта 2019

Хорошо, у меня есть 2 объекта на слое по умолчанию, с которыми мне нужно вызвать прыжок при столкновении raycast.Я вижу, что raycast пересекает платформу:

enter image description here

А вот мой коллайдер на платформе:

enter image description here

И все же ничего не напечатано:

Vector3 rotation = transform.forward;

        RaycastHit hit;
        Debug.DrawRay(new Vector3(transform.position.x, transform.position.y + 0.4f, transform.position.z), rotation, Color.green);
        if (Physics.Raycast(new Vector3(transform.position.x, transform.position.y + 0.4f, transform.position.z), rotation, out hit, rayDistance))
        {
            print(hit.transform);
            if (hit.transform.GetComponent<Platform>() != null)
            {
                Jump(hit.transform);
            }
        }

Что здесь не так?

1 Ответ

2 голосов
/ 09 марта 2019

Попробуйте этот код, адаптированный из https://docs.unity3d.com/ScriptReference/Physics.Raycast.html, используя ваши значения:

RaycastHit hit;
Vector3 startPoint = new Vector3(transform.position.x, transform.position.y + 0.4f, transform.position.z);
if (Physics.Raycast(startPoint, rotation, out hit, Mathf.Infinity))
{
    Debug.DrawRay(startPoint, rotation * hit.distance, Color.yellow);
    Debug.Log("Did Hit");
}
else
{
    Debug.DrawRay(startPoint, rotation * 1000, Color.white);
    Debug.Log("Did not Hit");
}

Вот это GIF из теста, который я сделал.

Это всего лишь тест, чтобы определить, связана ли проблема с расстоянием между лучами.

Вместо этого вы также можете использовать Debug.DrawLine, а затем установить конечную точку с тем же расстоянием, которое используется в RayCast.

Vector3 startPoint = new Vector3(transform.position.x, transform.position.y + 0.4f, transform.position.z);
if (Physics.Raycast(startPoint, rotation, out hit, rayDistance))
{
    Debug.DrawLine(startPoint, startPoint + rotation * rayDistance, Color.green);
}
else Debug.DrawLine(startPoint, startPoint + rotation * rayDistance, Color.red);

Другой GIF , использующий этот код.

Если он все еще не работает, попробуйте проверить столкновение матриц.

Не забывайте, чтоВы также можете использовать маску слоя в своем Raycast.:)

...