2017-02-02 15 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 

Я приложил скриншот для того же.

Я использую startPoint и endPoint, чтобы нарисовать линию, а также дать raycast как соответствующую начальную точку и направление.

Было бы очень полезно, если кто-то может указать на мою ошибку или альтернативный способ достижения этого.

Моя цель - нарисовать линию 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

Ваш ответ действительно привел меня к решению. Так что спасибо. Я просто заменил 'endpoint' на' Vector3 direction = new Vector3 (endPoint.x - startPoint.x, endPoint.y - startPoint.y, 1); ' –

+0

По вектору я имею в виду вектор между двумя точками, а не класс Vector3 , Таким образом, вы указывали точку в аргументе вместо вектора. Проблема была математической, а не программной. Извините, я не был достаточно ясно об этом. – Greg