Bagaimana saya tahu jika musuh saya dapat melihat pemain saya?

15

Diberikan pemain dan musuh dengan posisi, dan diberi vektor arah masing-masing, bagaimana saya bisa tahu jika satu dapat "melihat" yang lain?

Dengan kata lain, bagaimana saya menguji apakah satu posisi dengan arah di depan atau di belakang posisi lain dengan arah?

Untuk tujuan saya, 'di depan' berarti langsung di depan, atau 90 derajat di kedua sisi.

izb
sumber
11
Jelas solusinya adalah membuat kamera lain dan merender ulang adegan dari sudut pandang musuh, kemudian melakukan pengenalan gambar pada hasil untuk karakter pemain.
Naik
penghargaan jawaban paling sederhana berlaku untuk ...
OganM
3
Sementara komentar Riking kemungkinan dimaksudkan sebagai lelucon, ini adalah cara adil yang sebenarnya untuk melakukannya - memberikan NPC akses yang sama ke kondisi permainan yang akan dimiliki pemain alih-alih membiarkan mereka mengakses keadaan internal permainan.
R .. GitHub BERHENTI MEMBANTU ICE
5
@R .. Ya, tapi di mana Anda menggambar garis? Mengambil alasan ini ke titik akhir logisnya, NPC akhirnya menjadi mahir dengan kemampuan untuk bermain dan berpikir seperti manusia ... pada titik mana mereka mungkin secara rasional akan memutuskan untuk mulai melakukan wallhacking lagi: p
Thomas
@ Thomas: Dalam praktiknya saya pikir Anda dapat membuat semacam kompromi, mendekati tingkat informasi yang akan mereka miliki sebagai pemain tanpa kesulitan menerapkannya seperti itu. Langkah-langkah sederhana seperti pengujian yang benar untuk garis pandang, membatasi kemampuan untuk mengidentifikasi suatu objek di luar jarak tertentu, dll. Bisa jauh.
R .. GitHub BERHENTI MEMBANTU ICE

Jawaban:

17

Produk titik dari dua vektor dapat memberi tahu Anda apakah mereka saling berhadapan atau tidak. Vektor pertama mungkin bisa menjadi arah pandangan musuh, vektor kedua harus menunjuk dari posisi pemain ke posisi musuh.

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

Shittypeete
sumber
Ah ya, aku terlalu memikirkannya. Saya menyulap 4 vektor, tetapi saya benar-benar ingin vektor dari satu pemain ke yang lain. Video itu sangat membantu, terima kasih.
izb
Satu detail penting yang saya pikir harus ditambahkan ke jawaban ini adalah permainan juga harus melakukan raycast atau sesuatu untuk memastikan bahwa mereka sebenarnya dapat melihat pemain (tidak diblokir oleh dinding dll.)
T. Kiley
1
@ T.Kiley: yang sebenarnya telah disarankan oleh Riking dalam komentar untuk pertanyaan itu. Tidak, saya tidak berpikir itu lelucon. Jika gim Anda 3D, raycasting sebenarnya adalah cara yang adil untuk melakukannya. Hanya rerender adegan dengan semua objek dalam tekstur hitam, dari sudut pandang musuh, kecuali para pemain dan benda-benda penting lainnya harus diberikan dalam beberapa warna lain. Pastikan untuk menonaktifkan pencahayaan dan naungan. Jika buffer yang dihasilkan tidak seluruhnya hitam, maka Anda tahu bahwa seseorang berada di garis pandang musuh dan Anda dapat menggunakan warna untuk mengidentifikasi objek apa yang mereka.
Lie Ryan