2016-08-29 3 views
1

私はUpdate()の方法でPhysics.Linecastの方法を使用して、レーシングゲームの次点ポイントまでの距離を判断しています。このコードは、プレーヤーの変換位置から線をキャストし、次のウェイポイントのメッシュ上の最も近い点をターゲットにします(ClosestPointOnBoundsを使用)。ランダムにターゲットを失うラインキャスト

これは最初の2つのウェイポイントでは完全に機能しますが、2番目と3番目のポイントの間のある時点で機能が停止します(null参照?

これは完全に困惑してしまった。ラインキャストは、ちょっと見た目ポイント3をしばらく前に投げてからランダムに「失望」してしまいました...なぜ、それがしばらく働いているのかわかりません!

キャストした後、デバッグ描画線を5秒間最後にしました。だから、あなたが表示されます下の画像に:ウェイポイント2に成功

  • ラインに向けてキャスト

    1. ラインに成功ウェイポイント3に向けてキャストされ始め

    2. 突然の線はもはやに向けて投げていないされていますウェイポイント3

    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

    ようこそStackOverflow。あなたが持っている問題のコードスニペットを投稿した場合に役立ちます。ご質問がある場合はお知らせください。 – Matt

    +1

    ありがとうございましたMatt :)問題のコードを含めるように私の編集部を編集しました。 –

    +0

    好奇心の疎外さから、あなたはnextWayPointのポジションからあなたのポジションを引き離しているのはなぜですか?私が理解しているように、LineCastはVector3の終わりが開始位置に対して相対的ではないと予想しています。 – Kolichikov

    答えて

    0

    2点間の距離を取得したい場合 - 最も良い方法はVector3.Distanceです(私はあなたのコメントを見ましたが、このケースを見つけるよりも知っています)。

    として

    (ヌル参照?しかし....方法!)。

    物理キャスト関数は、キャストの開始点が衝突した場合にnullヒットを返すことができます。

    関連する問題