Saya sedang mempertimbangkan bagaimana menerapkan permainan berbasis komponen, karena itu tampaknya menjadi hal yang panas dan saya suka ide desain yang fleksibel. Salah satu fitur dari desain seperti itu adalah bahwa menambahkan hal-hal baru ke permainan dapat dilakukan melalui data, sering disajikan sebagai memuat konten melalui file teks seperti XML. Ini memiliki keuntungan karena dapat dibaca manusia dan mudah diedit dalam editor teks apa pun. Pada sisi negatifnya, teks bisa lebih lambat untuk ditangani, dan Anda harus mengelola banyak koleksi file data. Format berbasis teks yang serupa seperti JSON atau file konfigurasi akan memiliki manfaat serupa.
Di sisi lain, ada database kecil dan portabel seperti SQLite atau Tokyo Cabinet. Meskipun tidak langsung dapat dibaca oleh manusia, file-file ini mudah untuk dihubungkan, dan saya membayangkan beberapa jenis alat pengeditan akan lebih disukai untuk desain konten game. Menggunakan DB memungkinkan penyimpanan informasi konfigurasi yang konsisten dan pengambilan yang mudah. Anda bisa membuat cerita bersambung data menjadi DB untuk menyimpan game juga.
Dari segi kinerja, saya pikir secara umum XML lebih cepat untuk file kecil tetapi basis data lebih baik untuk sejumlah besar data. Saya membayangkan setiap game nyata akan memiliki banyak objek game.
Jadi pertanyaannya: Mana pendekatan yang lebih disukai? Saya condong ke DB, tapi saya ingin tahu apakah ada jebakan tersembunyi atau keuntungan nyata yang kuat untuk file teks. Atau jika ada alternatif lain selain ini (cerita bersambung ke format biner kurasa?)
sumber
JSON sangat ringan dan mudah dimengerti. Saya pikir ini lebih cocok untuk permainan. cJSON sangat bagus. itu juga akan dimasukkan ke sumber Anda dengan cara yang sama seperti SQLlite.
File XML lebih sulit untuk diedit oleh pengguna daripada yang Anda kira. jika Anda pergi ke rute itu, Anda mungkin ingin membuat editor untuk digunakan orang-orang untuk membantu mereka menghindari perangkap umum.
sumber
Saya terlambat ke pesta di sini tapi saya menghabiskan banyak waktu untuk meneliti hal ini.
Pertama mengapa saya tidak menggunakan yang berikut ini:
XML: Berlebihan verbose. Banyak redundansi. Mengulangi nama bidang? KOTOR
JSON: Saya pikir JSON bagus untuk tata letak UI tetapi untuk database, tidak. Ini akan memiliki masalah yang sama seperti XML, redundansi, dan bersarang dalam. KOTOR.
SQL : Ini adalah opsi yang bagus, jika Anda mengelola sakit kepala pengaturannya. Saya telah membuat game seluler tempat kami menyimpan data game online dalam basis data SQL. Format tabelnya bagus. Masalahnya adalah kami harus mengambil databasenya dari online dan pengaturannya bisa merepotkan. Tetapi SQL adalah solusi yang layak. Unity tidak mendukung ini secara asli, dan plugin yang saya coba memiliki masalah besar (khususnya ketika mencoba membuatnya berfungsi dengan kontrol versi).
Akhirnya, inilah solusi yang saya pilih untuk digunakan (dan saya menyukainya).
CSV : Sederhana. Mari saya gunakan format tabel, dan saya punya satu titik referensi mudah ketika saya perlu memperbaruinya. Saya dapat memiliki tabel untuk semua senjata saya, kolom untuk semua atribut, dan baris untuk setiap jenis senjata.
Anda dapat menggunakan Microsoft Excel tetapi itu memuntahkan peringatan bodoh ini setiap kali Anda perlu menyimpan. Anda dapat menggunakan makro untuk menimpanya, tetapi saya katakan selamatkan masalah Anda dan dapatkan LibreOffice . Ini gratis, mendukung pengeditan CSV, dan ketika Anda membuka file itu memuat lebar kolom untuk mencocokkan nama (Excel tidak melakukan ini dan itu membuat saya gila).
Maka Anda hanya perlu mem-parsing file CSV ke dalam gim Anda. Saya menggunakan Unity sehingga yang harus saya lakukan adalah menggunakan parser C # CSV yang bagus ini yang saya temukan:
Contoh parser CSV
Anda mengonversi file CSV menjadi objek data game dan Anda siap melakukannya. Dengan Unity Anda dapat mengubahnya menjadi ScriptableObjects . Jadi alur kerja saya adalah: Perbarui CSV -> Parse CSV ke dalam Objek Scriptable -> Gunakan data dari ScriptableObjects untuk game saya
sumber
Jawabannya tergantung pada bahasa apa yang Anda gunakan untuk game.
Jika Anda menggunakan C ++, Anda disarankan untuk menggunakan salah satu pustaka XML yang ada (seperti TinyXml atau eXpat ).
Di sisi lain, jika Anda menggunakan PHP, Anda dapat dengan mudah menggunakan server database seperti MySQL atau SQLite. (Perlu diingat bahwa jika Anda menggunakan rute ini, Anda akan membutuhkan lebih banyak sumber daya karena server database akan berjalan sebagai proses terpisah dan aplikasi database yang lebih besar seperti MySQL dapat mengkonsumsi banyak RAM saat menjalankan.)
JSON mendapatkan banyak momentum dan tentu saja merupakan pilihan terbaik jika aplikasi Anda ditulis menggunakan lebih dari satu bahasa.
Singkatnya, itu tergantung pada apa yang mudah digunakan dalam bahasa Anda.
sumber
Jika Anda ingin tetap berada di ranah XML, Anda dapat menggunakan Binary XML untuk membantu meningkatkan kinerja pemuatan.
Misalnya Fast Infoset adalah implementasi dari xml biner
sumber
Saya telah merancang basis data dan bermain-main dengan banyak ide permainan selama bertahun-tahun sekarang. Favorit pribadi saya saat ini, adalah beberapa format berbasis teks yang dapat dibaca manusia untuk konfigurasi, tetapi kemudian menguraikan "skrip lambat" ini menjadi sesuatu yang lebih dapat dijalankan. Sama seperti JAVA dan .NET dikompilasi ke dalam bytecode Run-time.
Gagasan yang sama berlaku di sini. Saya memiliki versi "sumber" komponen dan kemudian pre-compiler / parser menjalankannya. Jika mereka mengambil terlalu banyak memori, Anda dapat menempatkannya dalam database-cepat SQL dari beberapa agak atau menyimpannya sebagai file biner. Tapi maksud saya adalah, gunakan memori atau database SQL sebagai ruang kerja / cache Anda sehingga Anda tidak perlu menguraikan skrip berulang-ulang. Anda dapat membuat kompilator, memindahkan file yang diurai menjadi "source-lib" dan dengan cara ini biarkan precompiler melakukan versi juga (menjaga file sebelumnya untuk tujuan rollback).
Jika ini tentang "ruang harddisk tanpa batas", maka daftar ke sesuatu seperti Dropbox atau Amazon S3 dan sinkronkan dengan mereka.
Jadi rencana untuk saya saat ini:
Mengenai stabilitas, saya saat ini sedang membangun database untuk menjadi "co-location host" dan autosync antara beberapa lokasi juga, sehingga jika ada kegagalan jaringan / perangkat keras satu lokasi, situs lain harus dapat menangani lalu lintas yang sama / gamestates.
sumber
Jika Anda menggunakan couchdb, Anda pada dasarnya akan menyimpan semuanya sebagai struktur JSON. Couchdb akan membantu mereplikasi (beberapa) data pengguna Anda lebih atau kurang tanpa rasa sakit.
sumber
Anda dapat menemukan prosedur di Unity Wiki dengan PHP, MySQL dan C # / JavaScript, dan berfungsi dengan baik untuk tujuannya.
Ini terdiri dari tiga langkah
sumber