2015-11-22 4 views
2

Я пытаюсь сделать врага в своей игре, который может видеть свет, исходящий от фонарика игрока. Я делаю это путем raycasting от источника фонарика в направлении 5 направлений: середины светового луча, а также верхнего, нижнего, левого и правого конца света. Что-то вроде этого:Raycast со смещением

Я использую следующую функцию обновления в фонарике игрока:

void Update() { 
    float angle = GetComponent<Light>().spotAngle; 
    if (Physics.Raycast (transform.position, transform.forward, out hitMiddle)){ 
     hitMiddlePosition = hitMiddle.transform.position; 
    } 
    if (Physics.Raycast (transform.position, Quaternion.AngleAxis(-angle, transform.up) * transform.forward, out hitDown)){ 
     hitDownPosition = hitDown.transform.position; 
    } 
    if (Physics.Raycast (transform.position, Quaternion.AngleAxis(angle,transform.up) * transform.forward, out hitUp)){ 
     hitUpPosition = hitUp.transform.position; 
    } 
    if (Physics.Raycast (transform.position, Quaternion.AngleAxis (angle,transform.right) * transform.forward, out hitRight)){ 
     hitRightPosition = hitRight.transform.position; 
    } 
    if (Physics.Raycast (transform.position, Quaternion.AngleAxis (-angle, transform.right) * transform.forward, out hitLeft)){ 
     hitLeftPosition = hitLeft.transform.position; 
    } 
} 

Этот код должен отслеживать местоположение каждого из хитов. Однако местоположения никогда не соответствуют местоположениям, в которые попадает луч света. Месторождения обычно одинаковы во всех направлениях (Vector3 (-87.77855, 0, 87.83269)) и не меняются, когда игрок движется. В разных направлениях иногда меняется одно из значений.

Я пробовал много разных способов направления для raycasts, но я все еще не очень уверен в том, что лучи отбрасываются в том направлении, которое я намеревался.

Любые советы?

Большое спасибо!

+0

Вы подтверждаете, что выход опускается из всех случаев? (выполняется ли каждый случай)? Вы попробовали 11-ю перегрузку raycast, которая берет (Vector3, Vector3, вне Raycast, float distance)? –

+0

3- Вращение вокруг оси, как потолочный вентилятор, находится на оси. Вы смешиваете или смешиваете их? Я думаю, что если вы хотите повернуть вперёд, вы должны вращаться вокруг Z-оси вместо Up Vector. Весь мой теоретический вопрос. –

+0

Большое спасибо за ваш ответ! Передним направлением фонарика является z-направление, и это единственное направление, которое я не хотел бы вращать. Каждый случай действительно работает, поскольку значения обновляются некоторое время. Я не уверен, нужно ли добавлять преобразование. К умножению при выполнении смещений. Тем не менее, средний расист, похоже, тоже не работает, так что в настоящее время это моя первая проблема. – Timmeh

ответ

0

Я нашел ответ, и это было (конечно) очень тривиально. Проблема заключалась в том, что hit.transform.position задал позицию объекта, который был поражен, а не положение фактического местоположения пересечения. Изменение этого параметра на hit.point устраняет проблему. Теперь он работает как разработанный.