Я пытаюсь сделать врага в своей игре, который может видеть свет, исходящий от фонарика игрока. Я делаю это путем 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, но я все еще не очень уверен в том, что лучи отбрасываются в том направлении, которое я намеревался.
Любые советы?
Большое спасибо!
Вы подтверждаете, что выход опускается из всех случаев? (выполняется ли каждый случай)? Вы попробовали 11-ю перегрузку raycast, которая берет (Vector3, Vector3, вне Raycast, float distance)? –
3- Вращение вокруг оси, как потолочный вентилятор, находится на оси. Вы смешиваете или смешиваете их? Я думаю, что если вы хотите повернуть вперёд, вы должны вращаться вокруг Z-оси вместо Up Vector. Весь мой теоретический вопрос. –
Большое спасибо за ваш ответ! Передним направлением фонарика является z-направление, и это единственное направление, которое я не хотел бы вращать. Каждый случай действительно работает, поскольку значения обновляются некоторое время. Я не уверен, нужно ли добавлять преобразование. К умножению при выполнении смещений. Тем не менее, средний расист, похоже, тоже не работает, так что в настоящее время это моя первая проблема. – Timmeh