我在Physics.Linecast
方法中使用Update()
来确定到赛车游戏中下一个航点的距离。代码从玩家变换位置投射一条线,并将目标指向下一个航点的网格上的最近点(使用ClosestPointOnBounds
)。
这对于前两个方向点非常有效,但是在第二个和第三个点之间的某个时刻,功能停止了,(空引用?但......如何!?)。
这让我完全难过。线条投射正确地瞄准路线点3一段时间,然后随机“失去视线”。它...我不明白为什么,特别是因为它确实有效一段时间了!
我的调试绘制线在他们重新投射后持续了5秒钟。因此,在下面的图片中,您将看到:
线路成功转向航点2
线路开始成功转向航路点3
突然不再将线路投向航路点3
// Update is called once per frame
void Update()
{
Vector3 raycastStart = new Vector3 (transform.position.x, transform.position.y + 1, transform.position.z);
// NOTE: nextWayPoint is a gameObject, populated by referencing the relevant index position in the waypoints array
if (nextWayPoint != null)
{
// Cast a ray from the player's position towards the mesh collider of the next waypoint...
RaycastHit hit;
Physics.Linecast(raycastStart, nextWayPoint.GetComponent<MeshCollider>().ClosestPointOnBounds(transform.position) - transform.position, out hit, waypointsLayer);
// Render this line so we can see it...
Debug.DrawLine(raycastStart, hit.point, Color.red, 5f);
// Populate the distance variable with the length of the ray
disToNextWayPoint = hit.distance;
}
正确方向的任何想法,想法或一般推动当然会使我免于精神错乱!
答案 0 :(得分:0)
如果你想获得2分之间的距离 - 最好的方法是使用Vector3.Distance
(我看到你的评论,知道比你发现这个案例)。
至于
如果施放的起始点在对撞机中,物理演员函数可以返回null命中 - 请检查你的情况。(null引用?但......怎么样??)。