Как мне узнать, видит ли мой враг мой игрок?

15

Учитывая игрока и противника с положением, и учитывая вектор направления каждого, как я могу сказать, может ли один «видеть» другого?

Другими словами, как мне проверить, находится ли одна позиция с направлением впереди или позади другой позиции с направлением?

Для моих целей «перед» означает прямо перед или под углом 90 градусов в любую сторону.

IZB
источник
11
Очевидно, что решение состоит в том, чтобы создать другую камеру и заново визуализировать сцену с точки зрения противника, а затем выполнить распознавание изображения для результата для персонажа игрока.
Riking
Награда за самый упрощенный ответ достается ...
OganM
3
Хотя комментарий Рикинга, скорее всего, был задуман как шутка, это действительно справедливый способ сделать это - дать NPC такой же доступ к игровому состоянию, как у игрока, вместо того, чтобы позволить им получить доступ к внутреннему состоянию игры.
R .. GitHub ОСТАНОВИТЬ, ПОМОГАЯ ЛЕД
5
@R .. Да, но где ты проводишь черту? Приняв это рассуждение к своей логической конечной точке, NPC в конечном итоге становятся разумными, способными играть и мыслить как человек ... и в этот момент они, вероятно, в любом случае рационально решат снова начать взламывать стены: p
Томас
@ Томас: На практике я думаю, что вы можете пойти на какой-то компромисс, приблизив уровень информации, которую они будут иметь как игрок, не рискуя реализовать это таким образом. Простые меры, такие как правильное тестирование линии видимости, ограничение способности идентифицировать объект на определенном расстоянии и т. Д., Могут иметь большое значение.
R .. GitHub ОСТАНОВИТЬ ЛЬДА

Ответы:

17

Точечное произведение двух векторов может сказать вам, сталкиваются ли они друг с другом или нет. Первый вектор, вероятно, может быть направлением взгляда врага, второй должен быть вектором, указывающим с позиции игрока на позицию врага.

https://www.youtube.com/watch?v=Q9FZllr6-wY

Shittypeete
источник
Ах да, я обдумывал это. Я жонглировал 4 векторами, но на самом деле я хочу вектор от одного игрока к другому. Видео было очень полезным, спасибо.
Изб
Я думаю, что одна важная деталь должна быть добавлена ​​к этому ответу: игра также должна делать raycast или что-то еще, чтобы они действительно могли видеть игрока (не заблокированного стенами и т. Д.)
T. Kiley
1
@ T.Kiley: это на самом деле было предложено Рикингом в комментарии к вопросу. Нет, я не думаю, что это шутка. Если ваша игра 3D, Raycasting - действительно хороший способ сделать это. Просто измените сцену со всеми объектами в черной текстуре, с точки зрения противника, за исключением того, что игроки и другие важные объекты должны быть визуализированы в некоторых других цветах. Обязательно отключите освещение и затенение. Если результирующий буфер не совсем черный, то вы знаете, что кто-то находится на линии прямой видимости противника, и вы можете использовать цвет, чтобы определить, какие это объекты.
Ли Райан