Hai semuanya, postingan ini akan fokus bekerja dengan Database Relasional yang Tertanam SQLite dari Unity. Artikel ini ditulis oleh seorang pemula untuk pemula dengan tujuan menunjukkan kepada Anda bagaimana bekerja dengan SQLite, diasumsikan bahwa Anda mengetahui dasar-dasar SQL. Karena tidak ada tutorial yang jelas untuk pemula di Internet, saya memutuskan untuk menempati ceruk ini. Dalam artikel ini kita akan menulis kelas sederhana untuk bekerja dengan DBMS ini, yang dapat digunakan untuk menyelesaikan berbagai tugas (lokalisasi, penyimpanan data, memelihara tabel yang berbeda).
Apa itu SQLite dan mengapa kita membutuhkannya?
SQLite adalah sistem manajemen basis data relasional tertanam yang cukup populer. Nilai tambah penting dari SQLite adalah cross-platform-nya, jadi kita bisa menggunakan SQLite untuk berbagai platform. SQLite dapat digunakan ketika kecepatan dan kekompakan diperlukan, oleh karena itu, jika ada masalah penyimpanan data, saya memutuskan untuk menyelesaikannya menggunakan DBMS ini.
Bagaimana cara kerjanya dengan SQLite?
Untuk membuat dan mengedit basis data kami ada banyak utilitas dan plug-in gratis untuk peramban, saya pribadi akan menggunakan DB Browser (SQLite), itu mengaitkan saya dengan kesederhanaannya, dan bagi saya rasanya tidak terlalu nyaman untuk bekerja dengan berbagai plug-in di peramban. Secara umum, siapa pun yang mau itu berfungsi seperti itu. Menggunakan DB Browser, Anda dapat dengan mudah membuat tabel, membuat koneksi di antara mereka dan mengisinya dengan data tanpa menggunakan SQL. Selain itu, di DB Browser, Anda dapat melakukan segalanya dengan pena menggunakan SQLite, jadi di sini lebih nyaman bagi seseorang.
Membuat dan mengisi basis data pengujian
Kami membuat database di
Aset / StreamingAssets proyek kami (saya memilikinya db.bytes, karena Unity hanya mengerti
* .bytes untuk database, kami akan menggunakan ekstensi ini). Sebagai contoh, saya membuat database dengan tabel-tabel berikut:
1) Tabel "Pemain", yang menggambarkan esensi pemain:
CREATE TABLE "Player" ( "id_player" INTEGER NOT NULL, "nickname" TEXT NOT NULL, PRIMARY KEY("id_player") );
Diisi dengan data berikut:

2) Tabel "Skor", yang diperkenalkan untuk meningkatkan tingkat normalisasi database
CREATE TABLE "Scores" ( "id" INTEGER NOT NULL, "id_player" INTEGER NOT NULL, "score" INTEGER NOT NULL, PRIMARY KEY("id"), FOREIGN KEY("id_player") REFERENCES "Player"("id_player") );
Diisi dengan data berikut:

Menghubungkan perpustakaan
Kami membuat database di Aset / StreamingAssets proyek kami (saya punya db.bytes), maka kami perlu menghubungkan perpustakaan untuk bekerja dengan database ini. Unduh
file sqlite3.dll dari
situs resmi untuk bekerja dengan SQLite di Windows. Butuh beberapa hari bagi saya untuk membuat ACBD ini berteman dengan Android, karena perpustakaan yang ditunjukkan dalam
artikel ini ternyata tidak berfungsi, saya pribadi tidak berhasil menggunakannya di Android, kesalahan terus meningkat, karena ini saya unggah ini ditemukan di suatu tempat di Internet
versi perpustakaan untuk Android. Kami menempatkan perpustakaan di sini -
Aset / Plugin / sqlite.dll dan
Aset / Plugin / Android / sqlite.so .
Setelah semua manipulasi ini, salin
System.Data.dll dan
Mono.Data.Sqlite.dll dari
C: \ Program Files (x86) \ Unity \ Editor \ Data \ Mono \ lib \ mono \ 2.0 dan tempel
Aset / Plugin proyek Unity Anda. Saya ingin mencatat bahwa dalam versi 2018, Unity dapat menulis bahwa System.Data.dll sudah terhubung dan ada konflik dua file yang identik. Sebenarnya, ini diselesaikan dengan sederhana, kami tidak menghapus
System.Data.dll yang baru dimasukkan.
Struktur perpustakaan harus sebagai berikut:Aset / Plugin / Mono.Data.Sqlite.dll - hanya diperlukan :)
Aset / Plugin / System.Data.dll - alasan serupa
Aset / Plugin / sqlite3.dll - untuk bekerja dengan SQLite di Windows
Aset / Plugin / Android / libsqlite3.so - untuk bekerja dengan SQLite di Android
Menulis skrip untuk bekerja dengan database
Dan akhirnya, kita dapat mulai menulis skrip untuk bekerja dengan database yang dibuat. Pertama, buat file MyDataBase dan hubungkan
pustaka System.Data ,
Mono.Data.Sqlite ,
System.IO , buat kelas MyDataBase statis dan, tentu saja, hapus warisan dari MonoBehaviour. Tambahkan 3 variabel pribadi dan konstanta dengan nama file database. Kita harus mendapatkan sesuatu seperti ini:
using UnityEngine; using System.Data; using Mono.Data.Sqlite; using System.IO; static class MyDataBase { private const string fileName = "db.bytes"; private static string DBPath; private static SqliteConnection connection; private static SqliteCommand command; }
Ini semua baik, tentu saja, tetapi kami tidak akan dapat bekerja dengan database. Untuk bekerja dengan database, kita perlu mendapatkan path ke sana, saya mengusulkan untuk membuat konstruktor statis, yang hanya akan mendapatkan path ke database (saya ingat bahwa database terletak di StreamingAssets).
static MyDataBase() { DBPath = GetDatabasePath(); }
Catatan Kita perlu membuka paket database di jalur yang ditentukan (
Application.dataPath / db.bytes untuk Windows dan
Application.persistentDataPath / db.bytes untuk Android) karena folder StreamingAssets, setelah perakitan, memiliki atribut ReadOnly (kecuali untuk Android) dan kami tidak akan dapat menulis apa pun lalu di database. Sebenarnya, untuk dapat menulis sesuatu ke basis data, kami membongkar basis data kami. Dikatakan secara rinci jalur mana, di bawah platform mana yang akan digunakan dalam
artikel ini .
Kami akan menulis metode untuk membuka koneksi dan menutup, serta metode yang akan mengeksekusi permintaan yang tidak memerlukan pengembalian nilai, katakanlah, INSERT, UPDATE, BUAT, HAPUS, HAPUS, DROP.
Ajaibnya, sekarang skrip kami dapat menjalankan permintaan untuk modifikasi data. Tetapi bagaimana dengan SELECT yang sangat penting? Saya memutuskan bahwa nilai kembali metode yang harus menjalankan kueri untuk pemilihan data harus dari tipe atau string DataTable, jika Anda ingin mendapatkan 1 nilai. Untuk melakukan ini, tulis 2 metode:
Selesai, sekarang kami memiliki skrip sederhana yang dapat membuat permintaan untuk modifikasi dan pemilihan data. Mari kita menulis skrip ScoreManager sekarang. Yang akan menerima tabel hasil terbaik yang diurutkan dalam urutan menurun. Dan, untuk verifikasi, tampilkan nama panggilan pemimpin dan poinnya di Debug.Log.
using System.Collections; using System.Collections.Generic; using System.Data; using UnityEngine; public class ScoreManager : MonoBehaviour { private void Start() {
Inilah yang kami dapatkan saat startup:

Terima kasih atas perhatian Anda, saya dengan senang hati akan menerima kritik yang membangun.