2017-02-02 1 views
0

私のゲームでは、私はラインを描いており、ラインの長さを制限しています。もしコライダーに当たったら、raycasthit2dを使っています。しかし、それは常に機能しません。 enter image description here Debug.DrawRayを使用して動作を確認しましたが、予想通り動作しません。以下 は私のコードRaycastHit2Dが正常に動作しません

float distance = Vector3.Distance(startPoint, endPoint); 
RaycastHit2D hit = Physics2D.Raycast(startPoint, endPoint,distance, layerMask :1 << 8); 
Debug.DrawRay(startPoint,endPoint,Color.red,40f); 
Debug.Log("startPoint" + startPoint + " endPoint:" + endPoint+" distance:"+distance); 
if (hit.collider != null/* && hit.collider.CompareTag(GameConstants.TAG_OF_RESTRICT_LINES_OVER_PLAYER)*/) 
{ 
    Debug.Log(hit.collider.gameObject.name); 
    endPoint = hit.point; 
    Debug.Log(" :hit:" + hit.point); 
} 
Vector3[] array = new Vector3[] { startPoint, endPoint }; 
lr.SetPositions(array); 

コンソール出力

startPoint(-4.9, -2.7, 1.0) endPoint:(1.1, -3.7, 1.0) distance:6 

である私は同じのためのスクリーンショットを添付しています。

私はstartPointendPointを使ってラインを描画し、それぞれのスタートポイントと方向としてレイキャストを与えます。

誰かが私の間違いやこれを達成するための別の方法を指摘できる場合は、大きな助けになります。

私の目標は、lineRendererによって描画された線とまったく同じようにレイキャスト線を描画することです。

答えて

1

問題は、あなたが間違ったパラメータをPhysics2d.Raycastに与えることだと思います。 2番目の引数が無効であるあなたのコードで https://docs.unity3d.com/ScriptReference/Physics2D.Raycast.html

Physics2D.Raycast(startPoint, endPoint,distance, layerMask :1 << 8); 

2番目のパラメータはベクトルであり、あなたはそれにポイントを与える。ここ は、docへのリンクです。 startPointとendPointに基づいて正規化されたベクトルを与える必要があります。

+0

「endPoint」はVector3変数 –

+0

あなたの答えは結局解決に至りました。ほんとありがと。 –

+0

ベクトルでは、クラスVector3ではなく、2点間のベクトルを意味します。 。だから、あなたはベクトルの代わりに引数にポイントを与えていました。問題は数学的でプログラム的ではありませんでした。申し訳ありませんが、私はそれについて十分に明確ではありませんでした。 – Greg

関連する問題