Kapan saya akan menggunakan "skrip" atau "skrip" dalam sebuah game, sebagai lawan dari bahasa inti?

13

Istilah skrip dan skrip tampaknya digunakan secara bergantian di Game Development Stack Exchange, tetapi selain membaca pertanyaan tentang pilihan bahasa skrip, saya tidak mengerti hubungan antara skrip dan skrip, dan bahasa inti. Apa yang biasanya dilakukan skrip, kapan skrip itu digunakan, dan apakah skrip dalam beberapa konteks (seperti yang didefinisikan oleh pemrogram game) berbeda dari bahasa skrip?

Tetrad
sumber
4
Kemungkinan penipuan: gamedev.stackexchange.com/questions/2913/…
Tetrad
@Tetrad Terima kasih atas tautannya, tapi saya pikir pertanyaan lain membahas lebih banyak pertanyaan mendasar tentang arsitektur "mengapa", yang bertentangan dengan untuk apa dan kapan.
2
"apa" dan "kapan" akan spesifik untuk kasus penggunaan Anda. "Mengapa" memberi Anda kemampuan membuat keputusan. Tanpa spesifik, pertanyaan ini adalah penipuan (di mata saya).
Tetrad

Jawaban:

15

Skrip ditulis untuk bahasa skrip. Orang-orang dapat menggunakan kata-kata dalam kalimat slang untuk mendapatkan kekacauan yang Anda maksud tetapi meminta siapa pun untuk definisi Script, Scripting dan Scripting Language dan Anda akan mendapatkan sesuatu seperti: Scripting adalah tindakan menulis Script menggunakan Bahasa Scripting.

Ketika Anda menanamkan bahasa scripting ke mesin game, atau bahasa inti seperti yang Anda maksudkan, Anda mengekspos tidak hanya objek dalam mesin game tetapi juga memungkinkan logika untuk ditulis untuk mesin game. Satu hal lain yang perlu diperhatikan adalah bahwa ini mengubah game Anda menjadi semacam mesin virtual, karena bahasa scripting jarang dikompilasi ke bahasa mesin dan sebaliknya dimasukkan ke dalam bentuk kode byte dan ditafsirkan pada saat dijalankan oleh mesin game Anda.

Ini memiliki beberapa manfaat besar bagi tim pengembangan, beberapa di antaranya dapat Anda temukan di daftar berikut:

  • Bahasa skrip biasanya dikelola oleh memori sehingga Anda tidak perlu khawatir tentang alokasi
  • Mereka biasanya merupakan bahasa yang diketik secara longgar yang menghilangkan kebutuhan untuk memastikan Anda menggunakan tipe variabel untuk apa yang Anda lakukan, cukup buat variabel dan ikuti saja.
  • Bahasa itu sendiri seringkali sangat sederhana sambil memberikan sedikit kontrol kepada orang-orang yang bukan programmer
  • Mengubah skrip tidak memerlukan mesin inti untuk dikompilasi ulang.
  • Scripting vs Coding sering mengurangi waktu yang dibutuhkan untuk penyetelan logika game yang sangat iteratif.
  • Bergantung pada desain dan bahasa, Anda sering dapat memuat ulang skrip saat gim berjalan untuk penyetelan / pengujian yang lebih mudah.

Saya yakin daftar dapat terus berjalan dan terus saya yakin, terutama ketika Anda masuk ke jenis permainan khusus dan bagaimana skrip dapat membantu menentukan aturan pembentukan grup untuk memindahkan grup unit dalam RTS atau bagaimana Anda dapat membuat logika UI dalam sebuah bahasa scripting untuk menyediakan UI yang dapat diperluas untuk pengguna akhir Anda dan sejenisnya.

James
sumber
9

Menggunakan skrip memiliki banyak keunggulan dibandingkan "bahasa inti". Beberapa di antaranya adalah:

  • Memindahkan (lebih banyak) konten dari pengembang inti ke artis, membebaskan pengembang inti ke tugas-tugas mesin dari tugas gameplay
  • Naskah cenderung kotak pasir, tidak bisa melakukan apa pun yang benar-benar berbahaya di dalamnya
  • Memodifikasi skrip tidak memerlukan kompilasi dan eksekusi ulang game
Jari Komppa
sumber
Untuk poin-poin pertama Anda, dapatkah Anda memberikan contoh fungsi yang akan dipindahkan ke skrip untuk diedit oleh para seniman?
Contoh-contoh @Brian Reindel adalah statistik senjata / NPC, AI, dan peta / level.
Hackworth
1
@ Hackworth Apakah Anda mengatakan bahwa pemrograman AI dilakukan oleh artis? Skrip yang akan dilakukan oleh Artis akan menyertakan skrip untuk animasi dan render objek 3D dan semacamnya.
KRB
3
Seniman tidak boleh membuat program apa pun. Anda memisahkan engine dari logika game demi modularitas , bukan demi pengembangan pembongkaran ke orang yang kekuatannya ada di tempat lain.
Jon Purdy
1
@ Ya ampun, intinya adalah: mereka melakukan pemrograman "ringan", tetapi mereka berada di kamp "konten". Jadi terminologi itu rumit. =)
Jari Komppa
6

Sebuah skrip biasanya merupakan sepotong kode yang berjalan di luar mesin inti Anda. Ini biasanya terkandung dalam file teks di mana pun Anda ingin menyimpannya. Maka biasanya dimuat oleh mesin, diurai, dan dieksekusi saat runtime.

Apa yang umumnya terjadi adalah bahasa apa pun yang Anda gunakan (Lua, Angelscript misalnya), bahasa ini biasanya memiliki beberapa fasilitas yang memungkinkan pemrogram mesin untuk mengekspos fungsi mesin atau bahkan seluruh kelas ke instance dari "mesin skrip" yang saat ini sedang berjalan .

Misalnya (contoh yang benar-benar bodoh, tetapi hanya untuk menunjukkan maksudnya) kode permainan Anda mungkin memiliki fungsi publik yang memunculkan zombie di suatu tempat:

void SpawnZombie(int x, int y, int hp /* whatever else */)
{
   //...
}

Bahasa scripting yang Anda gunakan sekarang memungkinkan Anda untuk mengekspos fungsi ini ke parser scripting yang sedang berjalan. Ini secara efektif berarti bahwa Anda dapat membuka file teks, menulis "SpawnZombie (200,300,1337)" dan begitu mesin Anda mengeksekusi kode, Zombie akan muncul di lokasi itu.

Jawaban lain sudah mendaftar beberapa contoh yang baik tentang bagaimana ini biasanya digunakan, tetapi mereka meninggalkan satu poin yang saya temukan sangat penting:

Jenis-jenis skrip ini membuatnya sangat mudah untuk debug atau menguji gameplay saat runtime.

Katakanlah Anda ingin mengetahui cara sempurna untuk menempatkan zombie di peta sehingga memiliki efek menakut-nakuti maksimum pada pemain begitu mereka menemukannya. Tanpa dukungan skrip, Anda harus keluar dari aplikasi, mengubah beberapa angka ajaib dalam kode, mengkompilasi ulang dan mengujinya.

Dengan dukungan skrip (asalkan Anda sudah memiliki beberapa metode memasukkan teks selama runtime, misalnya konsol debug), Anda cukup mengetik "SpawnZombie (333.444.555)" dan melihat tampilannya.

Dengan cara yang sama mungkin bagi Anda untuk menelurkan senjata, kendaraan, memuat peta yang berbeda, mengubah nilai beberapa hal dalam permainan dll, menanamkan musuh karena Anda tidak ingin membuang waktu untuk sampai ke bagian yang perlu diuji dll

Ini akan menghemat banyak waktu dalam game yang lebih kompleks.

TravisG
sumber
2

1) Skrip seringkali lebih mudah untuk dimodifikasi daripada kode.

2) Skrip sering dimodifikasi lapangan. Ini memungkinkan modding game.

Loren Pechtel
sumber
Jadi apakah adil untuk mengatakan bahwa skrip Anda dibuat dengan bahasa yang tidak dikompilasi sehingga dapat diedit oleh siapa pun?
@ Brian Reindel: Secara umum, ya.
Loren Pechtel
2

Sebagian besar bahasa scripting jauh lebih ekspresif daripada bahasa di mesin inti. Seringkali mesin ditulis dalam bahasa tingkat rendah (mis. C ++) untuk alasan kinerja, tetapi kode gameplay tidak perlu sebagai pemain sehingga prioritas beralih ke kemampuan mengekspresikan fungsionalitas dengan mudah.

Misalnya, pengetikan dinamis vs. statis. Contoh lain: pengumpulan sampah vs. manajemen memori manual.

jhocking
sumber
0

Scripting memungkinkan Anda untuk menulis logika di tingkat yang lebih tinggi. Dengan kata lain, Anda menulis lebih sedikit kode dengan lebih banyak fungsi.

Jadi contoh, berikut ini menunjukkan perbedaan antara menulis sesuatu dalam kode dan menulisnya dalam bahasa skrip.

Kode Game

Update Loop
{
    if (CarExplodeAnimation.FinalFrame == true)
    {
        SceneGraph.Remove(Car);
        Message("You have destroyed the car.";
    }
    else
    {
        CarExplodeAnimation.AdvanceToNextFrame();
    }

}

Kode skrip

PlayAnimation(ShipExplode)  // blocks until animation completes
Message("You have destoryed the car.")

Lihat seberapa sedikit pengkodean yang harus dilakukan perancang jika Anda menggunakan bahasa skrip?

Alasannya adalah karena dalam kode permainan, Anda harus membagi acara menjadi beberapa frame, dan menulis kode dari perspektif beberapa frame. Di sisi lain, skrip memungkinkan Anda untuk memikirkan peristiwa beberapa frame sebagai hanya satu baris kode, karena semua kode tambahan diabstraksi di belakang fungsi skrip.

Anda mungkin bertanya, tetapi tidak bisakah fungsi itu hanya ditulis dalam kode permainan juga? Ya, tapi itu berarti para perancang harus membuka kode sumber dari mesin permainan dan menulis semua kode di sana, dan Anda tidak ingin desainer Anda memeriksa kode sumber dari mesin permainan (mereka mungkin secara tidak sengaja mengubah beberapa kode lain dan semuanya crash).

Alih-alih, Anda ingin desainer Anda melakukan sesuatu seperti ini sebagai gantinya: Klik kanan mobil di Editor Peta, klik Sisipkan Skrip, ketik kode skrip. Tidak ada masalah dengan kode sumber mesin game kritis.

Pengembang
sumber