来自游戏对象

时间:2018-05-15 09:19:01

标签: c# unity3d raycasting gameobject

我得到了一个与障碍物结合在一起的小场景,其中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);
     }

2 个答案:

答案 0 :(得分:1)

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

要达到你所寻求的学位,你可以选择这样的方法来选择光线方向:

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

答案 1 :(得分:1)

创建许多光线并不是解决此问题的有效方法。您可以使用Physics.SphereCast。你会像使用光线投射一样投射它,并给它一个半径来填充45到-45的视角。

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

再创建2个光线投射,1个用于45个,1个用于-45个。你将采用它们的标准化向量。

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

我希望它有所帮助..