2017-02-02 3 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에 잘못된 매개 변수를 지정하는 것입니다. 다음은 문서에 대한 링크입니다 : https://docs.unity3d.com/ScriptReference/Physics2D.Raycast.html

코드에서 2 번째의 인수가 잘못되었습니다

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

두 번째 매개 변수는 벡터이며, 당신이 그것에게 포인트를주고는. startPoint 및 endPoint를 기반으로 정규화 된 벡터를 제공해야합니다.

+0

'endPoint'는 Vector3 변수 –

+0

입니다. 귀하의 답변에 따라 솔루션이 나옵니다. 감사합니다. 나는 단지 'endpoint'를 'Vector3 direction = new Vector3 (endPoint.x - startPoint.x, endPoint.y - startPoint.y, 1);로 대체했다. –

+0

벡터에 의해, 나는 두 점 사이의 벡터를 의미하고 Vector3 클래스는 의미하지 않는다. . 그래서 당신은 벡터 대신에 논점에서 한 점을주고있었습니다. 문제는 수학적이었고 프로그래밍 적이 지 않았습니다. 미안, 나는 그것에 관해 충분히 명확하지 않았다. – Greg

관련 문제