
Desainer game secara teratur menghadapi tantangan menciptakan AI yang menarik. Proses ini bisa relatif sederhana atau sangat kompleks, tergantung pada kebutuhan proyek dan tujuan yang Anda kejar. Perancang permainan senior
Banzai Games Mikhail Dragovalovskiy berbicara tentang pengalamannya bekerja pada AI untuk game pertarungan seluler populer Shadow Fight 3.
Perbedaan antara SF3 dan sebagian besar game pertarungan
Seri
Shadow Fight segera dibuat dengan sejumlah fitur yang membedakannya dari banyak game pertarungan:
- Kehadiran kunci otomatis. Jika karakter hanya bergerak dan tidak menyerang, ia secara otomatis memblokir setiap serangan normal musuh;
- Kecepatan dan animasi lebih lambat. Taruhan pada komponen taktis: pemain harus punya waktu untuk memahami jenis pukulan yang ditimbulkan musuh dan serangan mana yang harus dipilih agar berhasil melakukan serangan balik. Hal ini memungkinkan kami untuk memberi pemain kesempatan untuk mempertimbangkan animasi yang kami coba buat seindah dan se fisik mungkin;
- Tabrakan yang jujur. Ini menciptakan situasi yang sangat keren di mana satu karakter dengan indah menghindari serangan yang kedua dan menyerang sebagai respons, dan berkat animasi yang halus pemain berhasil mempertimbangkan segalanya;
- Bentuk bayangan. Ketika skala khusus diisi, pemain dapat memasukkan bentuk bayangan dan menghabiskan beberapa trik spektakuler yang menerobos blok lawan
AI dalam game sebelumnya dalam seri
Kami sudah bekerja pada AI dalam game pertarungan kami sebelumnya - Shadow Fight 2, tetapi karena transisi ke 3D, munculnya tabrakan antara pemain dan penambahan bentuk bayangan, kami hanya dapat mentransfer sebagian dari logika AI, dan sisanya harus diciptakan kembali.
Di mana mulai bekerja pada AI?
Jika Anda tidak membuat bot menggunakan pembelajaran mesin, saya akan memilih dua pendekatan kapten:
- Buat bot lemah, lalu perkuat ke level yang diinginkan dengan fitur baru;
- Buat bot yang tak terkalahkan dan kemudian melemah.
Pilihan kedua terdengar sangat romantis: tampaknya Anda lebih pintar daripada semua orang dan membuat AI keren yang membengkokkan para pemain, dan kemudian dengan murah hati mengurangi kompleksitas bot. Dari sudut pandang pengembangan, ini mungkin lebih nyaman, karena Anda dapat memikirkan semua fitur dari perilaku bot yang Anda butuhkan sebelumnya, dan bayangkan sepenuhnya perilaku akhirnya.
Tentu saja, kami memilih opsi ini, walaupun kemudian kami menyadari bahwa semuanya tidak begitu sederhana: dengan keseimbangan animasi, blok otomatis, dan berbagai keterampilan, Anda hampir selalu dapat menemukan taktik dan pelanggaran yang diperlukan yang memungkinkan Anda mengalahkan AI dengan keterampilan tinggi. Kami tidak langsung memahami hal ini, tetapi hanya ketika kami mengukur dengan benar tingkat kemenangan para pemain di berbagai tahap permainan. Ini terlepas dari kenyataan bahwa bagi banyak orang, dilihat dari umpan balik mereka pada permainan, bot itu benar-benar tak terkalahkan.
Bagaimana cara kerja AI kami?
Pemicu atau aturan perilaku- Ini didasarkan pada aturan di mana bot melakukan tindakan acak. Kami menyebut pemicu sistem aturan ini. Sebagai contoh:
- Bot melihat jarak antara dirinya dan pemain dan hanya memilih klik yang dapat mengenai itu, dan kemudian memberikan yang acak dari klik ini;
- Bot tidak melakukan spam dengan melemparkan senjata;
- Bot masuk ke dahi dengan senjata lempar musuh, dan kemudian mulai menghindar untuk beberapa waktu;
- Dan banyak hal yang harus dilakukan atau tidak dilakukan bot ...
Jika Anda melepaskan bot seperti itu terhadap pemula, dengan tingkat pemompaan yang sama, hasilnya akan tergantung pada senjata yang digunakan lawan. Siapa yang lebih cepat dari animasi, dia akan menang. Karena, pada kenyataannya, keduanya menekan semua tombol, well, kecuali bahwa bot melakukannya sedikit lebih bermakna.
Pengambilan keputusanLangkah logis untuk meningkatkan AI adalah mengurangi keacakan dan menambahkan sistem pengambilan keputusan yang akan menggerakkan bot menuju kemenangan. Untuk melakukan ini, Anda perlu memahami keputusan mana yang benar dalam situasi apa. Untuk pertempuran ada dua situasi yang terjadi setiap saat:
- Musuh sedang menunggu;
- Musuh sedang menyerang.
Ada dua solusi juga:
- Perlu dikalahkan ketika dijamin akan mengenai;
- Anda perlu memblokir ketika mereka memukul Anda dan Anda tidak dapat melakukan serangan balik.
Ternyata untuk kemenangan, AI harus menghentikan serangan musuh dengan serangan baliknya, atau memblokir jika tidak dapat mengganggu mereka.
Kami membuat dua kelompok keputusan yang dibuat oleh bot: satu - jika musuh berdiri, yang lain - jika musuh menyerang. Agar AI tahu persis apa yang harus dilawan, kami datang dengan tabel tabrakan.
Tabel tabrakanIngat bagaimana Dokter Strange melihat melalui semua kemungkinan hasil pertempuran dengan Thanos? Demikian pula, tabel tumbukan bekerja seperti ini: komputer pra-menghitung hasil untuk setiap animasi menyerang dalam game pada setiap jarak yang memungkinkan.
Jika lebih terinci: kita meluncurkan pukulan dengan pedang dan pada saat yang sama pukulan dengan katana, dan kemudian kita melihat siapa yang akan memukul siapa. Kami melakukan prosedur ini untuk semua pukulan dalam permainan, di semua jarak dan dengan penundaan dalam jumlah frame yang berbeda (saya meluncurkan pukulan dengan pedang, dan musuh melalui frame N - serangan dengan katana). Semua hasil dicatat dalam tabel. Kami melakukan prosedur serupa sebelum setiap pembaruan dan menempatkan file yang dihasilkan setelah algoritma kompresi yang sulit dalam bentuk selesai dalam pembuatan agar tidak menghabiskan sumber daya perangkat dalam runtime. Pemain di klien sudah memiliki daftar semua hasil, yang berarti AI tahu yang memukul dapat melawan setiap pukulan pemain pada jarak tertentu, atau memahami bahwa saat ini cara terbaik adalah memblokir serangan.

Akibatnya, AI merespons secara efektif tindakan pemain. Artinya, mereka membalas serangan balasan. Sekarang Anda perlu mengajari bot untuk menyerang dengan cara yang optimal, bukan serangan acak.
Pilihan jarak dan pukulan yang tepatPembaca yang perhatian dan cerdas akan berkata: "Stop !!! Mengapa bahkan menyerang diri sendiri jika musuh selalu di autoblock? Kita harus menunggu serangan musuh dan menghukumnya dengan pukulan cepat, yang akan mengganggu serangannya! " Ya, memang, tapi bot yang tidak bergerak dan tidak menyerang tanpa aksi pemain terlihat paling aneh. AI harus dapat memilih serangan yang efektif untuk meluncurkan serangan, bahkan jika strategi yang optimal adalah bermain dari serangan balik. Untuk melakukan ini, kami telah mengembangkan sistem untuk memilih jarak dan serangan terbaik.
Seperti yang kami pikirkan: pemain paling sering menggunakan beberapa pukulan favorit, yang berarti bot akan secara spesifik melakukan serangan yang pada jarak yang dipilih tidak dapat diganggu oleh pukulan pemain yang khas. Untuk melakukan ini, kami:
- Kami mengumpulkan statistik dari semua pukulan pemain;
- Kami melihat seberapa jauh kami memiliki serangan balik yang paling efektif terhadap serangan tipenya;
- Kami melewati jarak ini ke bot dan membuatnya tetap di sana sepanjang pertempuran.
Secara teori, ini terdengar keren, tetapi dalam praktiknya ternyata tidak terlalu bagus: pemain jarang berdiri diam - mereka hampir selalu menekan tombol dan menekan bot, sehingga bot lebih sering dipandu oleh sistem pengambilan keputusan berdasarkan serangan pemain, alih-alih mengambil inisiatif. Jadi memilih serangan yang tepat hanya berfungsi melawan pemain pasif, tetapi memilih jarak terbaik telah meningkatkan serangan balik - mereka menjadi lebih beragam, karena bot memiliki lebih banyak pilihan.
Pada tahap ini, bot sudah cukup efektif: ia tahu cara terbaik untuk memulai serangannya, ia tahu kapan harus melakukan serangan balik dan kapan harus memblokir. Selanjutnya, kita akan berbicara tentang sistem yang memungkinkan Anda untuk mengatur tingkat kompleksitas yang diperlukan dan melemahkan atau memperkuat bot.
Kebencian dan pengampunanIni adalah konsep menarik yang mendasari sistem neraca kami. Melalui itu, kami menciptakan tingkat kompleksitas yang cukup untuk pemula dan profesional, serta memotivasi pemain untuk menggunakan pukulan yang berbeda, yang meningkatkan minat dan hiburan permainan.
Inti dari konsep ini terletak pada namanya: bot tersinggung oleh pukulan pemain, yang diulangi pemain dari waktu ke waktu. Dendam adalah counter yang mengurangi kemungkinan membuat keputusan yang kurang optimal dan meningkatkan kemungkinan AI akan melakukan serangan balik yang sempurna.
Di sisi lain skala terletak pengampunan - bot mulai meningkatkan kemungkinan memilih solusi yang tidak optimal dan mengurangi kemungkinan serangan balik jika pemain berhenti melakukan spam dan beralih menggunakan hit lainnya.
Jika kita ingin membuat bot yang kompleks, kita mengurangi kecepatan pengampunan, dan juga menetapkan tingkat permulaan yang tinggi, jika kita ingin membuat bot yang lemah, yang terjadi adalah sebaliknya.
TundaSetiap bot di SF3 memiliki keterlambatan dalam mengambil keputusan. Ini adalah parameter yang menyebabkan bot untuk menjeda N frame sebelum memilih opsi tindakan. Suatu hal yang berguna - memungkinkan Anda untuk membuat penampilan yang dipikirkan lawan Anda. Semakin sederhana bot yang ingin kita buat, semakin banyak penundaan yang kita tetapkan untuk itu.
Pemeriksaan kondisiUntuk membuat beberapa bagian permainan lebih emosional, kami menggunakan tanda centang pada status dan hubungan berbagai variabel game.
Kami dapat memaksa beberapa bot untuk tidak menggunakan senjata lempar pada jarak tertentu atau untuk mengurangi kecepatan pengampunan jika pemain memiliki lebih banyak poin hit daripada bot, atau membuat AI lebih agresif jika memiliki beberapa poin hit.
Secara umum, ini adalah add-on yang kami gunakan untuk menghasilkan situasi di mana bot secara dramatis mengubah perilaku dan efektivitasnya. Jika perlu, kami membatasi beberapa aksi bot dalam berbagai situasi, misalnya, bot lebih sulit melakukan lemparan daripada pemain, jika tidak, pemain tidak akan pernah bisa melempar bot, karena jarak di mana lemparan dapat diterapkan akan sama, dan bot hanya punya waktu untuk memulai animasinya lebih awal.
Berdasarkan semua mekanisme di atas, kami telah menciptakan 9 preset dasar AI yang kami gunakan dalam situasi dan bagian permainan yang berbeda. Pendekatan ini memungkinkan Anda untuk mengubah titik saldo per poin dan mengukur perubahan.
Hasil
Proses menciptakan taktik bot itu lama. Kami memperkenalkan fitur-fitur ini secara bertahap, jadi kadang-kadang pemain kami menderita, dan setelah mereka kami menderita, membaca ulasan dan kutukan mereka. Ketika kami mengunduh iterasi terbaru dari pengeditan, aliran ulasan negatif tentang perilaku lawan berhenti, yang sangat kami banggakan.
Pengalaman kami menunjukkan bahwa perbaikan lebih lanjut pada bot dengan pendekatan saat ini tidak memberikan peningkatan kualitas yang nyata. Oleh karena itu, kami mulai bekerja pada jaringan saraf yang akan mensimulasikan tindakan pemain.
Ada beberapa hal yang mendorong kita untuk mengambil keputusan ini:
- Kami sedang mengembangkan game pertarungan PvP baru - Shadow Fight: Arena. Fiturnya adalah pahlawan dengan taktik yang sangat berbeda dengan kemampuan dan mekanisme yang berbeda. Untuk membuat bot realistis dalam kondisi ini jauh lebih sulit daripada dalam kasus SF3;
- Kami sudah memiliki pengalaman positif menggunakan jaringan saraf untuk menyelesaikan masalah animasi di produk Cascadeur kami. Ini adalah program untuk membuat animasi realistis yang kami gunakan untuk semua game kami;
- Kami ingin membentuk tim spesialis ML yang kompeten untuk lebih meningkatkan keahlian kami di bidang ini dan menggunakannya untuk meningkatkan Cascadeur dan permainan kami.
Tim Banzai Games membutuhkan peneliti pembelajaran mendalam. Baca lebih lanjut tentang lowongan di sini .