Linecast随机丢失目标

时间:2016-08-29 18:24:21

标签: c# unity3d

我在Physics.Linecast方法中使用Update()来确定到赛车游戏中下一个航点的距离。代码从玩家变换位置投射一条线,并将目标指向下一个航点的网格上的最近点(使用ClosestPointOnBounds)。

这对于前两个方向点非常有效,但是在第二个和第三个点之间的某个时刻,功能停止了,(空引用?但......如何!?)。

这让我完全难过。线条投射正确地瞄准路线点3一段时间,然后随机“失去视线”。它...我不明白为什么,特别是因为它确实有效一段时间了!

我的调试绘制线在他们重新投射后持续了5秒钟。因此,在下面的图片中,您将看到:

  1. 线路成功转向航点2

  2. 线路开始成功转向航路点3

  3. 突然不再将线路投向航路点3

  4. enter image description here

    // 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;
            }
    

    正确方向的任何想法,想法或一般推动当然会使我免于精神错乱!

1 个答案:

答案 0 :(得分:0)

如果你想获得2分之间的距离 - 最好的方法是使用Vector3.Distance(我看到你的评论,知道比你发现这个案例)。

至于

  

(null引用?但......怎么样??)。

如果施放的起始点在对撞机中,物理演员函数可以返回null命中 - 请检查你的情况。