Несколько рейкастов с игрового объекта - PullRequest
0 голосов
/ 15 мая 2018

Я получил небольшую сцену в единстве с препятствиями и тому подобным, где ИИ стреляет из радиопередачи, чтобы определить, есть ли перед ним стена, и после этого он решает повернуть, если такое случается.Сейчас я пытаюсь получить несколько лучевых трансляций, чтобы он мог проверить то же самое, но с углом зрения +45 и - 45, в противном случае робот может проверять только свой передний луч.Как бы я это сделал?Пример кода ниже.

ray = new Ray(transform.position + Vector3.up, transform.forward);
     RaycastHit hit;
     if (Physics.Raycast(ray, out hit, 55f))
     {
         if (hit.collider.tag == ("Pick Up"))
         {
             Debug.DrawLine(ray.origin, hit.point, Color.red);
             transform.position = Vector3.MoveTowards(transform.position, hit.point, Time.deltaTime * speed);
         }
         else
         {
             Debug.DrawLine(ray.origin, hit.point, Color.blue);
             transform.Rotate(0, -80 * Time.deltaTime, 0);
         }
     }
     else
     {
         transform.position += transform.forward * speed * Time.deltaTime;
         Debug.DrawLine(ray.origin, hit.point, Color.white);
     }

Ответы [ 2 ]

0 голосов
/ 15 мая 2018

Создание множества лучей не является эффективным способом решения этой проблемы. Вы можете использовать Physics.SphereCast. Вы будете разыгрывать его так же, как и в Raycast, и дадите радиус, чтобы заполнить угол обзора от 45 до -45.

Вы можете рассчитать расстояние между двумя углами, как это;

Создайте еще 2 лучевых трансляции, 1 для 45, 1 для -45. Вы возьмете их нормализованный вектор.

Vector3 distance = Vector3.Distance(Raycast45.normalized, Raycast-45.normalized);

Надеюсь, это поможет ..

0 голосов
/ 15 мая 2018

Вы должны иметь возможность просто создавать несколько лучевых трансляций (Просто создайте новый луч).

Чтобы достичь той степени, которую вы ищете, вы можете использовать что-то вроде этого, где вы выбираете направление своего луча:

(transform.forward + transform.right).normalized
(transform.forward - transform.right).normalized
...