В моей игре я рисую линию и ограничиваю длину строки, если она попадает на любой коллайдер, я использую raycasthit2d. Но он не работает всегда. Я использовал 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.
'endPoint' является переменной Vector3 –
Ваш ответ действительно привел меня к решению. Так что спасибо. Я просто заменил 'endpoint' на' Vector3 direction = new Vector3 (endPoint.x - startPoint.x, endPoint.y - startPoint.y, 1); ' –
По вектору я имею в виду вектор между двумя точками, а не класс Vector3 , Таким образом, вы указывали точку в аргументе вместо вектора. Проблема была математической, а не программной. Извините, я не был достаточно ясно об этом. – Greg