【问题标题】:Multiple raycasts from game object来自游戏对象的多个光线投射
【发布时间】:2018-05-15 09:19:00
【问题描述】:

我得到了一个与障碍物统一的小场景,比如 AI 发射光线投射来检测它前面是否有墙,然后如果发生这种情况,它会决定旋转。我现在正在尝试获取多个光线投射,以便它可以检查相同但具有 +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);
     }

【问题讨论】:

  • 做一个光线投射的粉丝。例如,在 -45 到 +45 之间每 5 度进行一次光线投射。我不认为您可以使用跨多个角度的连续光线投射。

标签: c# unity3d raycasting gameobject


【解决方案1】:

创建许多射线并不是解决此问题的有效方法。您可以使用Physics.SphereCast。您将像使用 raycast 一样投射它,并为其设置一个半径以填充 45 到 -45 之间的视角。

你可以这样计算两个角度之间的距离;

再创建 2 个光线投射,1 个用于 45,1 个用于 -45。您将采用他们的归一化向量。

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

希望对你有帮助..

【讨论】:

    【解决方案2】:

    您应该能够只创建多个光线投射(只需创建一个新光线)。

    要达到您正在寻找的程度,您可以在选择光线方向的地方使用类似的东西:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-01-02
      • 1970-01-01
      • 2019-07-18
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多