Important: UNet adalah solusi yang diuraikan, dan Solusi Multiplayer baru dan NetworkingSistem Unity yang memungkinkan game multiplayer di jaringan komputer. More info Lihat di Glossary (Netcode untuk GameObjects) sedang berkembang. Untuk informasi lebih lanjut dan langkah selanjutnya melihat informasi di . |
Unity Multiplayer dapat menggunakan enkripsi Plug-inSatu set kode yang dibuat di luar Unity yang menciptakan fungsi dalam Unity. Ada dua jenis plug-ins yang dapat Anda gunakan di Unity: Managed plug-ins (diproduksi. Rakitan NET dibuat dengan alat-alat seperti Studio Visual) dan plug-ins asli (pustaka kode asli yang spesifik platform). More info
Lihat di Glossary, sehingga semua data yang Anda kirim melalui jaringan melalui enkripsi plug-in sebelum dikirim. Ini memungkinkan Anda untuk melindungi permainan Anda terhadap kecurangan dengan manipulasi paket dan serangan pada server permainan khusus Anda.
Unity Multiplayer tidak memiliki plug-in enkripsi built-in, sehingga Anda harus menyediakan plug-in Anda sendiri yang menerapkan algoritma enkripsi, dan yang menerapkan fungsi wajib yang tercantum di bawah ini.
Diagram berikut menggambarkan bagaimana Unity Multiplayer menggunakan plug-in enkripsi Anda, jika Anda menyediakan satu.
Untuk menginstruksikan permainan atau aplikasi Anda untuk menggunakan plug-in enkripsi, Anda harus memanggil UnityEngine.Networking.NetworkTransport.LoadEncryptionLibrary(path)
di mana path
adalah jalan ke plugin kompilasi Anda. Biasanya pada Windows akan menjadi string.Format("{0}/Plugins/UnetEncryption.dll", Application.dataPath)
.
Ketika Anda memanggil fungsi ini, Unity memeriksa file ada, dan itu menerapkan semua fungsi wajib (didaftarkan di bawah). Ini adalah fungsi yang sistem multiplayer Unity itu sendiri akan memanggil. Jika Anda membuat plugin enkripsi Anda sendiri, Anda mungkin perlu menambahkan lebih banyak fungsi yang Anda sebut dari kode C # Anda. Misalnya, untuk menginisialisasi algoritma Anda atau untuk menyediakan plug-in Anda dengan nilai-nilai utama. Anda dapat melakukan ini di cara biasa untuk plugin asli callable dari C#.
Catatan: Lokasi plugin dalam versi built dari permainan Anda tidak tentu sama dengan folder Aset Anda, dan mungkin berbeda antara platform target. Anda mungkin perlu menulis kode yang mendeteksi lingkungan runtime saat ini dan memilih jalan yang benar berdasarkan itu.
Anda bisa mendapatkan plugin enkripsi sampel dan proyek sampel Unity menggunakannya dari GitHub · Instragram · Pinterest · LiveJournal · 500px · Flickr · Dribbble · DeviantArt. Ini disediakan untuk menggambarkan titik awal untuk mengimplementasikan Plug-in Anda sendiri.
Setiap enkripsi Plug-in Anda membuat atau menggunakan harus menyediakan fungsi berikut. Unity akan gagal memuat plug-in jika tidak mendefinisikan ini. Ini adalah fungsi yang akan disebut oleh runtime Unity itu sendiri. Plugin biasanya akan menyediakan fungsi additional untuk disebut dari kode C# pengguna, misalnya untuk mendaftarkan kunci.
int UNetEncryptionLib_Encrypt(
void * payload,
int payload_len,
void * dest,
int & dest_len,
int connection_id,
bool isConnect);
Fungsi ini melakukan enkripsi. Ini disebut oleh jaringan Unity ketika paket dikirim melalui jaringan.
Encrypt
harus kembali nol pada kesuksesan. Pada nilai pengembalian lainnya, runtime akan menjatuhkan paket tanpa mengirimkannya.
int UNetEncryptionLib_Decrypt(
void * payload,
int payload_len,
void * dest,
int & dest_len,
int & key_id);
Fungsi ini melakukan dekripsi. Ini disebut oleh jaringan Unity ketika paket diterima dari jaringan.
payload
adalah paket yang diterima.payload_len
adalah panjang dalam byte penyangga muatan.dest
adalah penyangga ke mana plugin harus menulis data yang terdekripsi.dest_len
adalah kapasitas dalam byte penyangga dest. Plugin harus mengganti nilai ini dengan jumlah byte benar-benar tertulis menjadi dest.key_id
adalah pengidentifikasi integer. Plugin harus menulis nilai yang unik mengidentifikasi kunci dekripsi yang digunakan. Pada server nilai ini akan dilewatkan kembali ke ConnectionIdAssigned
jika koneksi baru diterima. Decrypt
harus kembali nol pada kesuksesan. Pada nilai pengembalian lainnya, paket dijatuhkan tanpa diproses lebih lanjut.
unsigned short UNetEncryptionLib_SafeMaxPacketSize(
unsigned short mtu);
Anda harus memanggil fungsi ini dari permainan Anda untuk memodifikasi ConnectionConfig.PacketSize
(juga dikenal sebagai unit transmisi maksimum, atau MTU) sebelum memanggil NetworkTransport.AddHost
.
Misalnya, permainan Anda mungkin biasanya menggunakan MTU dari 1000 byte. Jika ConnectionConfig.PacketSize
diatur ke 1000 byte sebelum melewatinya menjadi NetworkTransport.AddHost
(melalui HostConfig.DefaultConfig
), maka lapisan NetworkTransport akan mengirimkan tidak lebih dari 1000 byte dari cleartext dalam satu paket.
Plugin enkripsi biasanya akan menambahkan beberapa overhead karena informasi header yang ditempatkan sebelum payload, serta rounding-up payload ke ukuran blok enkripsi. Misalnya, jika Anda mengirim 18 byte dari cleartext, dan plug-in perlu menambahkan 49 byte header dan menggunakan AES untuk mengenkripsi data dengan ukuran blok 16 byte, maka algoritma akan menghasilkan paket 81 byte (18 byte cleartext rounds hingga 32 byte ciphertext, dan kemudian 49 byte tambahan header).
Unity memanggil fungsi ini untuk memastikan bahwa paket yang akan dikirim tidak melampaui batas apa yang memungkinkan untuk mengirim, mengingat jaringan MTU dan ekspansi ciphertext enkripsi Anda dan padding.
mtu
adalah unit transmisi maksimum. Ukuran paket terbesar yang Anda inginkan plugin untuk menghasilkan.Jumlah maksimum dari cleartext yang harus disediakan untuk panggilan tunggal untuk Enkripsi, untuk plugin untuk menghasilkan paket tidak lebih besar dari MTU.
Anda harus mengatur ukuran paket maksimum dalam konfigurasi koneksi Anda untuk memberitahu Unity Multiplayer untuk membagi data sehingga sesuai dengan persyaratan enkripsi Anda. Jika Anda melihat bahwa beberapa pesan Anda tidak berhasil mentransmisikan jaringan, itu bisa karena mereka terjatuh karena melebihi ukuran paket maksimum.
void UNetEncryptionLib_ConnectionIdAssigned(
int key_id,
unsigned short connection_id);
Ini disebut pada server ketika koneksi baru diterima dan ID yang ditugaskan untuk itu.
key_id
untuk paket ini.Decrypt
for this packet.connection_id
berikutnya ketika mengirim paket kembali ke klien.Encrypt
calls when sending packets back to the client.