Hampir semua permainan membutuhkan kecerdasan buatan (AI) yang berinteraksi dengan pengguna, paling sering dalam bentuk kekuatan yang memusuhi pemain. Dalam beberapa kasus, AI harus membantu pemain, dalam kasus lain ia harus melawannya, tetapi semua karakter yang dikendalikan oleh komputer memiliki beberapa kesamaan. Bergantung pada persyaratan proyek, AI dapat menggunakan perilaku sederhana atau kompleks. Persyaratan tersebut dapat berupa diplomasi dengan pemain lain atau pengembaraan sederhana bolak-balik di platform. Bagaimanapun, perlu untuk memastikan bahwa AI melakukan tugasnya secara efisien.
Dalam proyek ini, saya akan menunjukkan kecerdasan buatan yang sangat sederhana. Misalkan kita membuat game di mana seorang pemain harus menyelinap di dekat markas musuh. Ketika seorang pemain diperhatikan oleh kamera keamanan, musuh dibuat di dekatnya dan untuk waktu singkat mengejar pemain. Itulah yang kami implementasikan dalam proyek pada tingkat paling sederhana. Setelah menyelesaikan proyek, Anda akan menerima objek pemain yang dikendalikan, lingkaran yang digunakan sebagai kamera musuh, dan objek musuh yang akan mengejar pemain ketika objek kamera menginformasikan tentang keberadaannya.
Persiapan
Pertama kita perlu membuat proyek 3D. Klik pada tombol
Baru di bagian atas jendela setelah memulai Unity, seperti yang ditunjukkan pada Gambar 1.
Gambar 1: membuat proyek baruBeri nama proyek
AI Anda dan pastikan itu adalah proyek 3D. Setelah memilih tempat di komputer untuk menyimpan proyek, klik tombol
Buat Proyek di bagian bawah, yang ditunjukkan pada Gambar 2.
Gambar 2: layar pengaturan proyekSetelah membuat proyek, hal pertama yang perlu kita lakukan adalah mengatur folder di jendela
Aset untuk mengatur pekerjaan kita. Klik kanan pada jendela
Aset dan pilih
Buat → Folder untuk membuat folder baru. Namai folder ini
Bahan . Kemudian buat folder kedua dan beri nama
Script . Gambar 3 menunjukkan bagaimana tampilannya.
Gambar 3: membuat folder baruSetelah semua ini, jendela
Aset akan terlihat seperti yang ditunjukkan pada Gambar 4.
Gambar 4: Jendela aset .Selanjutnya, buat lantai di mana semua benda akan berdiri. Di jendela
Hierarki , pilih
Buat → Objek 3D → Pesawat untuk membuat objek pesawat yang akan digunakan sebagai lantai.
Gambar 5: Membuat Obyek Pesawat.Beri nama objek
Lantai ini dan ubah nilai
Skala X -nya menjadi 7, dan nilai
Skala Z menjadi 3. Setelah itu, jendela
Inspektur dengan objek
Lantai yang dipilih akan terlihat seperti yang ditunjukkan pada Gambar 6.
Gambar 6: Mengatur properti objek Floor .Sekarang kita perlu membuat bahan baru untuk
Lantai untuk membedakannya dari sisa benda yang akan ditempatkan di tempat kejadian. Dalam folder
Bahan pada jendela
Aset , buat materi baru dengan mengklik kanan pada jendela
Aset dan pilih
Buat → Bahan .
Gambar 7: membuat materi baruSetelah selesai, beri nama
Lantai bahan.
Gambar 8: Bahan lantai .Di bagian atas jendela
Inspektur dengan
Lantai dipilih, pilih pemilih warna.
Gambar 9: memilih color picker.
Tentu saja, Anda dapat memilih warna apa saja untuk lantai, tetapi dalam contoh ini saya memilih merah-coklat, seperti yang ditunjukkan pada Gambar 10.
Gambar 10: color picker.
Pilih objek
Lantai di jendela
Hierarki , dan di komponen
Mesh Renderer , pilih panah kecil di sebelah
Bahan .
Gambar 11: Mempersiapkan perubahan materi.Seret bahan
Lantai dari jendela
Aset ke bidang
Elemen 0 komponen
Mesh Renderer di jendela
Inspektur .
Gambar 12: Mendefinisikan material Lantai sebagai bahan objek Lantai .Setelah selesai dengan objek
Lantai , kita harus membuat di sekitar area dinding agar pemain tidak jatuh dari tepi. Kembali ke
Buat → Objek 3D → Pesawat untuk membuat bidang baru. Kami menyebutnya bidang
Tembok ini dan mengaturnya ke dimensi yang sama dengan
Lantai , yaitu
Skala X dengan nilai
Skala 7 dan
Z dengan nilai 3. Kemudian buat tiga dinding lagi, pilih objek dan tekan Ctrl + D tiga kali. Setelah itu, letakkan dinding di sekitar gender sesuai dengan data dalam tabel.
Judul
| Posisi X
| Posisi Y
| Posisi z
| Rotasi x
| Rotasi z
|
Dinding
| -35
| 21
| 0
| 0
| -90
|
Dinding (1) | -1
| 11
| -15
| 90
| 0
|
Dinding (2)
| -1
| 11
| 13.5
| -90
| 0
|
Dinding (3)
| 34
| 21
| 0
| 0
| 90 |
Tabel 1: Posisi dan rotasi semua objek
Dinding .
Setelah menyelesaikan semua ini, Anda perlu mengubah posisi kamera sehingga terlihat di lantai dari atas. Pilih objek
Kamera Utama dan atur
Posisi Y ke 30,
Posisi Z ke 0, dan
Rotasi X ke 80.
Gambar 13: mengatur objek kamera.Adegan sudah disiapkan, jadi sudah waktunya untuk membuat karakter pemain. Di jendela
Hierarki , klik
Buat → Objek 3D → Sphere untuk membuat objek sphere. Beri nama objek ini
Player , lalu klik tombol
Add Component di bagian bawah jendela
Inspector .
Gambar 14: menambahkan komponen baru.Sekarang temukan
Rigidbody . Setelah itu, pilih komponen
Rigidbody dari daftar dan tambahkan
Rigidbody ke objek
Player .
Gambar 15: menambahkan komponen benda tegar .Selanjutnya, Anda perlu memberi tag pada pemain, yang nantinya akan berguna bagi kami dalam kode. Klik menu tarik-turun
Tag di sudut kiri atas jendela
Inspektur dan pilih tag
Player .
Gambar 16: Menentukan tag baru.Kita perlu mengatur posisi pemain agar dia tidak berada di bawah objek
Lantai . Dalam contoh, saya menempatkan pemain di sudut kiri atas dengan
posisi X sama dengan 26,
Posisi Y sama dengan 1, dan
posisi Z sama dengan -9.
Gambar 17: penempatan pemain.Agar kode masa depan kita berfungsi dengan benar, kita tentu saja harus melampirkannya ke objek. Kembali ke jendela
Hierarki dan kali ini pilih
Buat → Objek 3D → Cube . Sebut kubus
Guard ini, tambahkan komponen
Rigidbody dan komponen
Agen NavMesh dengan menggunakan tombol
Add Component di jendela
Inspektur . Selanjutnya, letakkan di suatu tempat di sudut kiri atas tempat kejadian. Setelah itu, jendela
Inspektur objek
Guard akan terlihat seperti ini:
Gambar 18: Penjaga objek di jendela Inspektur .Dan objek ini harus diletakkan seperti ini:
Gambar 19: Penempatan objek Guard .Akhirnya, kita membutuhkan objek yang digunakan sebagai "mata" dari objek
Guard , yang akan memberi tahu
Guard bahwa pemain menyentuhnya. Untuk terakhir kalinya, buka jendela
Hierarchy dan pilih
Create → 3D Object → Sphere untuk membuat objek sphere lainnya. Beri nama objek ini
Looker . Kali ini kita tidak perlu menambahkan komponen lain ke dalamnya. Namun, kami akan mengubah ukuran objek. Setelah memilih
Looker , ubah variabel komponen
Transform berikut di jendela
Inspektur .
- Skala X pada 9.
- Skala Y pada 0,5.
- Skala Z pada 9.
Setelah itu, posisikan
Penampil sehingga terletak di bagian tengah atas lantai, seperti yang ditunjukkan pada Gambar 20.
Gambar 20: Lokasi Penampil.Ini adalah waktu yang tepat untuk memberi
Looker materi yang unik sehingga Anda dapat melihat bahwa itu layak untuk dihindari. Di folder
Bahan di jendela
Aset , klik kanan dan buat materi baru. Beri nama
Looker dan beri warna merah terang. Setelah itu, tunjuk bahan ini sebagai bahan objek
Looker untuk mengubah warnanya. Setelah itu, adegannya akan terlihat seperti ini:
Gambar 21: Objek looker dengan materi baru.Satu-satunya hal yang tersisa bagi kami adalah membuat mesh navigasi untuk
Guard , yang dapat dipindahkannya. Ada menu
Window di bagian atas editor Unity. Pilih
Jendela → Navigasi untuk membuka jendela
Navigasi seperti pada Gambar 22.
Gambar 22: Jendela navigasi .Pilih objek
Lantai di
Hierarki , lalu di jendela
Navigasi , pilih kotak centang
Navigasi Statis .
Gambar 23: Statis Navigasi .Selanjutnya, pilih opsi
Bake di bagian atas jendela.
Gambar 24: Beralih ke menu Bake .Menu
Bake terbuka, di mana Anda dapat mengubah properti mesh navigasi yang akan kita buat. Dalam contoh kita, tidak ada yang perlu diubah. Cukup klik tombol
Bake di kanan bawah.
Gambar 25: membuat jaring navigasi baru.Pada titik ini, Unity akan meminta Anda untuk menyelamatkan tempat kejadian. Simpan, setelah itu jala navigasi akan dibuat. Sekarang adegan akan terlihat seperti ini:
Gambar 26: Adegan saat ini dengan jaring navigasi yang ditambahkan.Sekarang semua yang ada di Unity sudah dikonfigurasikan, jadi sekarang saatnya membuat skrip yang diperlukan agar proyek berjalan. Di jendela
Aset , klik kanan dan pilih
Buat → C # Script . Beri nama
Pemain skrip ini. Ulangi operasi ini dua kali lagi, buat skrip dengan nama
Guard and
Looker .
Gambar 27: membuat skrip baru.Setelah itu, folder
Script di jendela
Aset akan terlihat seperti ini:
Gambar 28: Folder skrip .Pertama, kita akan mulai menulis kode skrip
Player . Klik dua kali skrip
Player di jendela
Aset untuk membuka Visual Studio dan mulai membuat kode.
Kode
Skrip
Player cukup sederhana, yang dilakukannya adalah membiarkan pengguna memindahkan objek bola. Di bawah deklarasi kelas, kita perlu mendapatkan tautan ke komponen
Rigidbody yang sebelumnya kita buat dalam proyek.
private Rigidbody rb;
Tepat setelah itu, dalam fungsi
Mulai , kami memerintahkan Unity untuk mengatur komponen
Rigidbody saat ini dari objek
Player ke
rb .
rb = GetComponent<Rigidbody>();
Setelah itu, skrip
Player akan terlihat seperti ini:
Gambar 29: Skrip pemain saat ini.Sekarang setelah nilai
rb ditetapkan, kita perlu membiarkan objek
Player bergerak ketika kita menekan tombol panah. Untuk memindahkan objek, kita akan menggunakan fisika, menerapkan gaya ke objek ketika pengguna menekan tombol panah. Untuk melakukan ini, cukup tambahkan kode berikut ke fungsi
Pembaruan :
if (Input.GetKey(KeyCode.UpArrow)) rb.AddForce(Vector3.forward * 20); if (Input.GetKey(KeyCode.DownArrow)) rb.AddForce(Vector3.back * 20); if (Input.GetKey(KeyCode.LeftArrow)) rb.AddForce(Vector3.left * 20); if (Input.GetKey(KeyCode.RightArrow)) rb.AddForce(Vector3.right * 20);
Dengan ini kami telah menyelesaikan skrip
Player . Script yang sudah selesai akan terlihat seperti ini:
Gambar 30: skrip Player jadi.Simpan pekerjaan Anda dan kembali ke Unity. Kali ini, pilih skrip
Penjaga di jendela
Aset . Untuk membuat kode
Guard berfungsi, Anda perlu menambahkan konstruk penggunaan ke bagian atas skrip.
using UnityEngine.AI;
Selanjutnya, deklarasikan variabel berikut segera setelah deklarasi kelas.
public GameObject player; private NavMeshAgent navmesh;
Objek
Player digunakan sebagai nilai variabel
pemain dari objek
Guard . Ini akan berguna nanti ketika kita memerintahkan objek
Guard untuk mengejar pemain. Kemudian variabel
navmesh dinyatakan menerima komponen
NavMeshAgent dari objek. Kami akan menggunakannya nanti ketika
Penjaga mulai mengejar pemain setelah ia mengetahui bahwa pemain itu menyentuh objek
Penampil . Dalam fungsi
Mulai , kita perlu mengatur nilai variabel
navmesh ke komponen
NavMesh Agent objek:
navmesh = GetComponent<NavMeshAgent>();
Kemudian, dalam fungsi
Pembaruan , kami menambahkan satu baris kode:
navmesh.destination = player.transform.position;
Baris ini menetapkan tujuan untuk objek
Guard . Dalam kasus kami, ini akan mengambil posisi saat ini dari objek
Player dan pindah ke titik ini. Setelah operasi, objek akan terus mengejar pemain. Pertanyaannya adalah, bagaimana proses respon dilakukan? Itu tidak akan dikodekan dalam skrip
Guard , tetapi dalam skrip
Looker . Sebelum beralih ke script Looker, lihat Gambar 31 untuk memverifikasi kode skrip
Guard Anda.
Gambar 31: skrip Guard yang sudah jadi.Di dalam
Looker, kita perlu mendeklarasikan variabel berikut:
public GameObject guard; private float reset = 5; private bool movingDown;
Setelah itu, kami mengomentari fungsi
Mulai , yang tidak kami butuhkan dalam skrip ini. Mari beralih ke fungsi
Perbarui dan tambahkan kode berikut:
if (movingDown == false) transform.position -= new Vector3(0, 0, 0.1f); else transform.position += new Vector3(0, 0, 0.1f); if (transform.position.z > 10) movingDown = false; else if (transform.position.z < -10) movingDown = true; reset -= Time.deltaTime; if (reset < 0) { guard.GetComponent<Guard>().enabled = false; GetComponent<SphereCollider>().enabled = true; }
Di sinilah tindakan utama proyek berlangsung, jadi mari kita menganalisis kodenya. Pertama, tergantung pada nilai dari variabel boolean
movingDown , objek yang dilampirkan skrip ini akan bergerak ke atas atau ke bawah. Begitu dia mencapai titik tertentu, dia akan mengubah arah. Selanjutnya,
Looker akan menurunkan nilai reset berdasarkan waktu nyata. Begitu penghitung waktu menjadi kurang dari nol, ia akan mengambil skrip
Guard dari objek
Guard dan menonaktifkannya, setelah itu objek
Guard akan mulai bergerak ke posisi terakhir yang diketahui pemain hingga saat ini, dan kemudian berhenti.
Looker juga menyalakan collider-nya lagi sehingga seluruh proses dapat dimulai kembali. Sekarang skrip kami terlihat seperti ini:
Gambar 32: Script looker .Berbicara tentang colliders: sekarang saatnya untuk membuat kode konflik yang mengatur ulang timer
Looker dan menyertakan skrip
Guard . Di fungsi
Perbarui , buat kode berikut:
private void OnCollisionEnter(Collision collision) { if (collision.gameObject.tag == "Player") { guard.GetComponent<Guard>().enabled = true; reset = 5; GetComponent<SphereCollider>().enabled = false; } }
OnCollisionEnter Unity secara otomatis mengenalinya sebagai kode tumbukan, dan karenanya mengeksekusi ketika tumbukan terjadi dengan objek lain. Dalam kasus kami, ini pertama-tama memeriksa untuk melihat apakah objek yang bertabrakan memiliki tag
Player . Jika tidak, ia mengabaikan sisa kode. Jika tidak, ini akan mengaktifkan skrip
Guard ,
mengatur timer
reset ke 5 (mis., Lima detik), dan menonaktifkan collider-nya sehingga pemain masih bisa bergerak melalui objek dan tidak secara tidak sengaja tersangkut di objek
Looker . Fungsi ini ditunjukkan pada Gambar 33.
Gambar 33: Kode tabrakan untuk Looker.
Itu semua kode proyek sudah siap! Anda dapat melakukan beberapa hal lagi sebelum menyelesaikan proyek. Simpan semua pekerjaan dan kembali ke Unity.
Penyelesaian proyek
Untuk menyelesaikan proyek, kita hanya perlu melampirkan skrip ke objek yang sesuai dan mengatur beberapa variabel. Pertama, pergi dari jendela
Navigasi ke jendela
Inspektur :
Gambar 34: transisi ke jendela Inspektur.
Setelah itu, mari kita mulai dengan objek
Player . Pilih di jendela
Hierarchy , dan kemudian di bagian bawah jendela
Inspektur klik pada tombol
Add Component dan tambahkan skrip
Player . Ini melengkapi objek
Player .
Gambar 35: Komponen skrip pemain.
Selanjutnya, pilih objek
Guard . Seperti sebelumnya, lampirkan skrip
Guard ke objek. Kali ini kita perlu memberi tahu
Guard siapa pemainnya. Untuk melakukan ini, seret objek
Player dari
Hierarki ke dalam bidang
Player dari komponen skrip
Guard , seperti yang ditunjukkan pada Gambar 36.
Gambar 36: Membuat objek Player nilai dari bidang Player .Kita juga perlu menonaktifkan skrip
Guard . Dalam proyek kami,
Guard akan mengejar pemain setelah menyalakan skripnya. Script
Guard ini harus dimasukkan hanya setelah pemain menyentuh objek
Looker . Yang perlu Anda lakukan adalah hapus centang pada kotak di sebelah teks
Guard (Script) di komponen:
Gambar 37: Menonaktifkan skrip Guard .Akhirnya, mari kita beralih ke objek
Looker dan lampirkan script
Looker ke sana. Kali ini, objek
Looker akan membutuhkan objek
Guard sebagai nilai variabel
Guard -nya. Sama seperti kita menetapkan objek
Player ke variabel
Player dari skrip
Guard , kita akan melakukan hal yang sama dengan objek
Guard dan skrip
Looker . Seret
Penjaga dari
Hirarki ke bidang
Penjaga skrip
Penampil . Dan proyek selesai! Klik tombol Play di bagian atas editor Unity untuk menguji proyek Anda.
Gambar 38: Menguji suatu proyek.Coba pindahkan objek
Player ke objek
Looker (ingat bahwa pemindahan dilakukan dengan panah!). Perhatikan bahwa setelah ini, objek
Guard akan mulai mengejar pemain. Dia akan melanjutkan pengejaran selama sekitar 5 detik, setelah itu dia akan menyerah.
Gambar 39: Proyek yang sepenuhnya selesai dalam aksi.Kesimpulan
AI ini sangat sederhana, tetapi dapat dengan mudah diperluas. Misalkan, jika kita membayangkan bahwa objek
Looker adalah kamera, dan penjaga melihat melalui itu untuk menemukan Anda, itu akan logis untuk memberikan objek
Guard sepasang mata sendiri. Pemain bisa pergi dekat kamera, tetapi mereka harus memperhitungkan mata penjaga. Anda juga dapat menggabungkan proyek ini dengan
konsep menemukan jalan : berikan penjaga jalan yang akan ia ikuti, sehingga menciptakan lingkungan yang lebih menarik bagi pemain.
AI sederhana seperti itu dapat dikembangkan dengan berbagai cara. Anda mungkin tidak ingin melakukan apa pun di atas dan memutuskan untuk melakukan sesuatu sendiri. Saya menyarankan Anda untuk bereksperimen, mungkin Anda akan memiliki ide proyek yang menarik, yang layak untuk diselesaikan.