Perbedaan yang paling penting adalah bahwa Unity Random.Range
sedikit lebih mudah digunakan, karena statis. System.Random
Namun, pustaka kelas dasar C # menawarkan Anda lebih banyak kontrol dan isolasi.
Mungkin saja mereka juga menggunakan implementasi under-the-hood yang berbeda (walaupun dugaan saya adalah Unity Random
hanya diimplementasikan dalam hal sistem Random
), tetapi itu mungkin bukan masalah yang perlu diperhatikan. Pada dasarnya mereka berdua kemungkinan jenis yang sama dari generator angka acak: generator pseudo-acak berdasarkan iterasi urutan yang ditentukan oleh beberapa seed).
Masalah kontrol lebih relevan, karena dalam beberapa konteks Anda mungkin ingin menggunakan aliran acak yang berbeda untuk hal-hal yang berbeda. Misalnya, dalam konteks jaringan jaringan langkah-kunci, Anda mungkin ingin memperbaiki seed yang digunakan untuk menghasilkan peristiwa yang mempengaruhi gameplay secara acak di semua pemain dalam game, tetapi Anda mungkin tidak terlalu peduli dengan aliran angka acak yang digunakan untuk murni acara visual dan dapat memungkinkan streaming yang akan diunggulkan dengan cara yang lebih tradisional (dengan sistem uptime saat peluncuran game, misalnya).
Demikian pula, jika Anda akan menghasilkan angka acak dalam banyak utas, Anda mungkin ingin menggunakan objek acak berbeda untuk setiap utas untuk mencegah kondisi balapan. Ini mungkin muncul jika logika game Anda berjalan di banyak utas dan Anda juga memiliki sistem permainan ulang, misalnya.
Pada akhirnya, itu tidak selalu lebih baik untuk menggunakan satu atau yang lain secara umum, melainkan ada pro dan kontra. Ketika Anda perlu mengisolasi urutan angka dari urutan acak potensial lain yang mungkin terjadi, atau ketika Anda perlu kontrol lokal atas benih urutan, gunakan instance System.Random
. Jika Anda hanya memerlukan nilai acak cepat dan kotor untuk penggunaan yang dibuang atau skenario lain yang tidak berdampak, Unity yang disederhanakan Random
mungkin baik-baik saja.
UnityEngine.Random memiliki beberapa kemudahan penggunaan:
Statis / dapat diakses secara global - Anda tidak perlu membuat instance untuk setiap objek atau sistem yang membutuhkan keacakan. Sebagian besar atau semua skrip Anda dapat membagikan sumber ini.
Metode kenyamanan - Anda dapat menggunakan Random.Range (), Random.insideUnitSphere, Random.rotationUniform, Random.ColorHSV () untuk mendapatkan nilai acak yang didistribusikan dengan baik dari berbagai jenis yang berguna tanpa harus memutar matematika Anda sendiri.
(Saya belum menemukan konfirmasi mengenai apakah UnityEngine.Random memberikan jaminan konsistensi lintas-platform yang berbeda dari implementasi Mono dari System.Random - mereka mungkin sama atau mungkin tidak sama di bawah tenda)
Anda tentu saja dapat membangun kelas Anda sendiri yang menggunakan System.Random (atau perpustakaan lain, atau PRNG Anda sendiri) untuk melakukan ini, tetapi bagian baiknya adalah Anda tidak perlu - Implementasi Unity dimaksudkan untuk memberi Anda dasar yang baik untuk perilaku acak di luar kotak.
Yang mengatakan, ada kasus di mana Anda ingin menggunakan sumber keacakan lain:
Jika Anda menggunakan banyak utas, setiap utas harus memiliki sumber pseudorandomness sendiri untuk menghindari pertikaian (UnityEngine.Random hanya dapat diakses di utas utama)
Jika Anda memerlukan urutan pseudorandom deterministik (mis. Untuk generator level unggulan) Anda mungkin ingin sistem itu memiliki sumber pseudorandomness sendiri yang tidak dapat diakses oleh skrip lain, sehingga perbedaan dalam urutan eksekusi tidak menyebabkannya lewati angka dan hancurkan determinisme yang Anda andalkan. Untuk info lebih lanjut, ada posting bagus di blog Unity tentang nomor acak unggulan .
jika Anda memerlukan keacakan yang kuat secara kriptografis untuk keamanan, perjudian, atau membuat ID unik, Anda harus menggunakan perpustakaan khusus untuk tujuan ini. Baik UnityEngine.Random maupun System.Random tidak memberikan jaminan kualitas yang memadai.
sumber
UnityEngine.Random bersifat statis. Jika Anda ingin membuat beberapa instance dari generator angka acak, maka Anda ingin menggunakan System.Random.
Tidak ada cara untuk mencari kode sumber untuk Implementasi Persatuan, namun, Microsoft menyediakan sumber untuk System.Random .
sumber