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 . |
Game multiplayer menggunakan konsep network visibility untuk menentukan pemain yang dapat melihat mana GameObjectsObjek mendasar dalam adegan Unity, yang dapat mewakili karakter, props, pemandangan, kamera, waypoints, dan banyak lagi. Fungsi GameObject didefinisikan oleh Komponen yang melekat padanya. More info
Lihat di Glossary pada waktu tertentu selama gameplay. Dalam permainan yang memiliki sudut pandang bergerak dan memindahkan GameObjects, itu umum bahwa pemain tidak dapat melihat segala sesuatu yang terjadi dalam permainan sekaligus.
Jika pemain tertentu, pada titik tertentu dalam waktu selama gameplay, tidak dapat melihat sebagian besar pemain lain, karakter non-pemain, atau hal-hal bergerak atau interaktif lainnya dalam permainan Anda, biasanya tidak perlu host untuk mengirim informasi tentang hal-hal tersebut ke klien pemain.
Ini dapat menguntungkan permainan Anda dalam dua cara:
Mengurangi amount of data yang dikirim di jaringan antara pemain. Ini dapat membantu meningkatkan responsif dari permainan Anda, dan mengurangi penggunaan bandwidth. Semakin besar dan lebih kompleks permainan multiplayer Anda, semakin penting masalah ini.
Ini juga membantu** mencegah peretasan**. Karena klien pemain tidak memiliki informasi tentang hal-hal yang tidak dapat dilihat, hack pada komputer pemain tidak dapat mengungkapkan informasi.
Ide “visibility” dalam konteks jaringan tidak tentu berhubungan dengan apakah GameObjects terlihat langsung pada layar. Sebaliknya, itu berkaitan dengan apakah data harus atau tidak boleh dikirim tentang GameObject yang dimaksud dengan klien tertentu. Sederhananya, jika klien tidak dapat 'lihat' GameObject, itu tidak perlu mengirim informasi tentang GameObject di jaringan. Idealnya Anda ingin membatasi jumlah data yang Anda kirim di jaringan hanya apa yang diperlukan, karena mengirim sejumlah besar data yang tidak perlu di jaringan dapat menyebabkan masalah kinerja jaringan.
Namun, itu juga dapat menjadi sumber daya intensif atau kompleks untuk menentukan secara akurat apakah GameObject benar-benar terlihat untuk pemain tertentu, sehingga sering menjadi ide yang baik untuk menggunakan perhitungan yang lebih sederhana untuk tujuan menentukan apakah pemain harus dikirim data jaringan tentang itu - yaitu apakah itu 'Network Visible'. Saldo Anda ingin mencapai ketika mempertimbangkan ini adalah antara biaya kompleksitas perhitungan untuk menentukan visibilitas, dan biaya pengiriman informasi lebih dari yang diperlukan melalui jaringan. Cara yang sangat sederhana untuk menghitung ini adalah pemeriksaan jarak (proximity), dan Unity menyediakan komponen bawaan untuk tujuan ini.
Komponen Jaringan Proximity Checker Unity adalah cara paling sederhana untuk menerapkan visibilitas jaringan untuk pemain. Ini bekerja dalam hubungannya dengan sistem fisika untuk menentukan apakah GameObjects cukup dekat (yaitu, "lihat" untuk tujuan mengirim pesan jaringan dalam permainan multiplayer Anda).
Untuk menggunakan komponen ini, tambahkan ke PrefabJenis aset yang memungkinkan Anda untuk menyimpan GameObject lengkap dengan komponen dan properti. Prefab bertindak sebagai template dari mana Anda dapat membuat instance objek baru di tempat kejadian. More info
Lihat di Glossary dari GameObject jaringan yang ingin Anda membatasi visibilitas jaringan.
Jaringan Proximity Checker memiliki dua parameter visibilitas yang dapat dikonfigurasi:
Vis Range mengontrol ambang jarak di mana jaringan harus mempertimbangkan GameObject terlihat ke pemain.
Vis Update Interval controls seberapa sering tes jarak dilakukan. Nilai adalah penundaan dalam detik antara pemeriksaan. Ini memungkinkan Anda untuk mengoptimalkan pemeriksaan untuk melakukan beberapa tes mungkin. Semakin rendah jumlah, semakin sering pembaruan terjadi. Untuk GameObjects yang lambat, Anda dapat mengatur interval ini menjadi nilai yang lebih tinggi. Untuk GameObjects yang bergerak cepat, Anda harus mengaturnya untuk menurunkan nilai.
Anda harus melampirkan komponen ColliderBentuk tak terlihat yang digunakan untuk menangani tabrakan fisik untuk objek. Seorang sari tidak perlu menjadi bentuk yang sama dengan jala objek - perkiraan kasar sering lebih efisien dan tidak dapat dibedakan dalam gameplay. More info
Lihat di Glossary untuk setiap GameObjects yang ingin Anda gunakan dengan Jaringan Proximity Checker.
Ketika seorang pemain pada klien jarak jauh bergabung dengan permainan berjaring, hanya GameObjects yang terlihat jaringan ke pemain akan ditidur pada klien jarak jauh itu. Ini berarti bahwa bahkan jika pemain memasuki dunia besar dengan banyak GameObjects jaringan, permainan dapat dimulai dengan cepat karena tidak perlu menahan setiap GameObject yang ada di dunia. Perhatikan bahwa ini berlaku untuk menghubungkan GameObjects di SceneAdegan berisi lingkungan dan menu permainan Anda. Pikirkan setiap file Adegan unik sebagai tingkat yang unik. Di setiap Adegan, Anda menempatkan lingkungan, hambatan, dan dekorasi, pada dasarnya merancang dan membangun permainan Anda dalam potongan-potongan. More info
Lihat di Glossary Anda, tetapi tidak mempengaruhi pemuatan Aset. Unity masih membutuhkan waktu untuk memuat Aset untuk Prefab terdaftar dan GameObjects Adegan.
Ketika pemain bergerak di dunia, set perubahan GameObjects yang terlihat jaringan. Klien pemain diberitahu tentang perubahan ini karena mereka terjadi. ObjectHide** **message dikirim ke klien ketika GameObject menjadi tidak lagi terlihat jaringan. Secara default, Unity menghancurkan GameObject ketika menerima pesan ini. Ketika GameObject menjadi terlihat, klien menerima pesan ObjectSpawn, seolah-olah Unity telah memijat GameObject untuk pertama kalinya. Secara default, GameObject sesaat seperti GameObject lainnya.
tuan rumah berbagi Adegan yang sama sebagai server, karena bertindak sebagai server dan klien untuk pemain hosting permainan. Untuk alasan ini, tidak dapat menghancurkan GameObjects yang tidak terlihat oleh pemain lokal.
Alih-alih, ada metode virtualLogin Login ** ** pada kelas NetworkBehaviour yang diinvoked. Metode ini diinjak pada semua NetworkBehaviour
scriptsSepotong kode yang memungkinkan Anda untuk membuat Komponen Anda sendiri, memicu peristiwa permainan, memodifikasi sifat komponen dari waktu ke waktu dan menanggapi input pengguna dengan cara apa pun yang Anda sukai. More info
Lihat di Glossary pada GameObjects yang mengubah keadaan visibilitas pada host.
Implementasi default dari disable OnSetLocalVisibility
atau memungkinkan semua komponen Renderer pada GameObject. Jika Anda ingin menyesuaikan implementasi ini, Anda dapat menimpa metode di skrip Anda, dan memberikan perilaku baru untuk bagaimana host (dan oleh karena itu klien lokal) harus menanggapi ketika GameObject menjadi jaringan yang terlihat atau tidak terlihat (seperti menonaktifkan elemen HUD atau renderer).