2017-02-02 46 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來繪製線條,並將raycast作爲各自的起點和方向。

如果有人能夠指出我的錯誤或替代方法來實現這一點,這將是一個很大的幫助。

我的目標是完全按照lineRenderer繪製的線繪製光線投射線。

回答

1

我認爲問題在於你給Physics2d.Raycast提供了錯誤的參數。 這裏是鏈接到文檔: https://docs.unity3d.com/ScriptReference/Physics2D.Raycast.html

在代碼中的第二個參數是無效的:

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

第二個參數是一個向量,你給它一個點。你應該給出一個基於startPoint和endPoint的歸一化矢量。

+0

'endPoint'是一個Vector3變量 –

+0

您的答案確實讓我最終找到了解決方案。那謝謝啦。我剛剛用'Vector3方向=新的Vector3(endPoint.x - startPoint.x,endPoint.y - startPoint.y,1)替換了'endpoint';' –

+0

通過矢量,我指的是兩點之間的矢量,而不是類Vector3 。所以你在爭論中提出了一個觀點,而不是一個向量。這個問題是數學問題,而不是程序問題。對不起,我對此並不清楚。 – Greg