Unity Raycast игнорирует LayerMask - PullRequest
2 голосов
/ 27 сентября 2019

по какой-то причине мой raycast поражает объекты, находящиеся в другом слое.

private int obstaclesLayerMask = (1 << 11) | (1 << 12);
private Vector3 GetPointOfContactNormal()
{
    Ray ray = new Ray(transform.position, transform.forward);
    if (Physics.Raycast(ray.origin, ray.direction, out hit, obstaclesLayerMask))
    {
        Debug.Log(hit.collider.gameObject.name);
        return hit.normal;
    }

    return Vector3.zero;
}

Я пытался изменить layerMask на случайные слои, даже те, которые не указаны как 1 << 30, и попытался использовать LayerMaskВместо этого .GetMask (), но raycast все еще поражает объекты.Только установка layerMask на слой по умолчанию, например 1 << 0, заставила raycast игнорировать столкновения. </p>

1 Ответ

1 голос
/ 27 сентября 2019

Кроме того, чтобы добавить к вышеупомянутому ответу, я нашел кое-что еще, что из моих знаний не сработало бы.

Похоже, вы помещаете obstaclesLayerMask на расстоянии Параметр Physics.Raycast

это все параметры:

  1. origin: начальная точка луча в мировых координатах.

  2. direction:Направление луча.

  3. maxDistance: максимальное расстояние, которое луч должен проверять на наличие столкновений.

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

  5. queryTriggerInteraction: указывает, должен ли этот запрос попадать в Triggers.

диапазон аргументов будет правильным, если вы измените его на следующее:

//I put it on 300f here but just put there what you prefer.
if (Physics.Raycast(ray.origin, ray.direction, out hit, 300f, obstaclesLayerMask))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...