来自游戏对象的多个光线投射
Multiple raycasts from game object
我得到了一个与障碍物统一的小场景,例如 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);
}
您应该能够创建多个光线投射(只需创建一个新光线)。
要达到您正在寻找的度数,您可以在选择光线方向的地方使用类似的东西:
(transform.forward + transform.right).normalized
(transform.forward - transform.right).normalized
创建很多光线并不是解决这个问题的有效方法。您可以使用 Physics.SphereCast
。您将像使用光线投射一样投射它,并给它一个半径以填充 45 到 -45 的视角。
你可以这样计算两个角之间的距离;
再创建 2 个光线投射,1 个用于 45,1 个用于 -45。您将采用它们的归一化向量。
Vector3 distance = Vector3.Distance(Raycast45.normalized, Raycast-45.normalized);
希望对你有帮助..
我得到了一个与障碍物统一的小场景,例如 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);
}
您应该能够创建多个光线投射(只需创建一个新光线)。
要达到您正在寻找的度数,您可以在选择光线方向的地方使用类似的东西:
(transform.forward + transform.right).normalized
(transform.forward - transform.right).normalized
创建很多光线并不是解决这个问题的有效方法。您可以使用 Physics.SphereCast
。您将像使用光线投射一样投射它,并给它一个半径以填充 45 到 -45 的视角。
你可以这样计算两个角之间的距离;
再创建 2 个光线投射,1 个用于 45,1 个用于 -45。您将采用它们的归一化向量。
Vector3 distance = Vector3.Distance(Raycast45.normalized, Raycast-45.normalized);
希望对你有帮助..