Unity - Raycast距离不会改变

时间:2017-11-15 00:43:09

标签: c# unity3d distance

我正试图在一个没有箱斗或刚体的立方体前面探测到地面。我可以检测到它,但距离永远不会改变。我可以使用非常大数量或非常小但它仍能在相同距离检测地面。

调试线工作正常,在地面之前没有检测到任何东西。即使尝试没有距离的光线投射也能使检测保持相同的距离。 我尝试了使用相同结果的方法Raycast的其他一些变体。

这是我的剧本:

Ray ray = new Ray(transform.position, transform.forward);
RaycastHit hitInfo;
Debug.DrawRay(pos, transform.forward * detectDistance, Color.green);
if (Physics.Raycast(ray,out hitInfo, detectDistance)) {
       Debug.Log(hitInfo.transform.name);
       Debug.DrawRay(pos, transform.forward * detectDistance, Color.red);
}

2 个答案:

答案 0 :(得分:2)

如果你的主要目标是计算两个游戏对象(立方体和地面)之间的距离,那么使用Raycast不是必须的。您可以采用其他方法:

Vector3 dist = Vector.distance(cube.transform.position, ground.transform.position);
Debug.Log(string.Format("Distance between {0} and {1} is: {2}", cube, ground, dist));

但是如果您想继续使用Raycast,而没有关于您的场景如何以及游戏对象如何定位的所有信息,我只建议您尝试以下方法:

1-像这样计算雷的方向:

Vector3 direction = ( cube.transform.position - ground.transform.position ).normalized;
Ray ray = new Ray( cube.transform.position, direction );

2-计算距命中的距离:

if (Physics.Raycast(downRay, out hit)) {
   float distance = hit.distance;
}

3-以防万一计算void FixedUpdate()

的距离

答案 1 :(得分:0)

问题是其他地形块没有生成对撞机网格,直到你真正接近它。 我确实找到了一种远远生成它的方法。