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 . |
Network ManagerKomponen Jaringan yang mengelola state jaringan proyek. More info
Lihat di Glossary menawarkan fitur pemijatan pemain sederhana built-in, namun Anda mungkin ingin menyesuaikan proses pemijatan pemain - misalnya untuk menetapkan warna untuk setiap pemain baru yang ditidur.
Untuk melakukan ini Anda perlu untuk menimpa perilaku default dari Network Manager dengan skrip Anda sendiri.
Ketika Network Manager menambahkan pemain, itu juga mengulangi GameObjectObjek 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 dari Player 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 dan mengasosiasikannya dengan koneksi. Untuk melakukan ini, Network Manager panggilan. Anda dapat mengubah perilaku ini dengan menginjak. Implementasi default OnServerAddPlayer
instani instance pemain baru dari pemain Prefab dan panggilan untuk menahan instance pemain baru. Implementasi kustom Anda dari OnServerAddPlayer
juga harus memanggil NetworkServer.AddPlayerForConnection
, tetapi Anda bebas untuk melakukan awalisasi lain yang Anda butuhkan dalam metode itu juga.
Contoh di bawah ini menyesuaikan warna pemain. Pertama, tambahkan skrip warna ke prefab pemain:
using UnityEngine;
using UnityEngine.Networking;
class Player : NetworkBehaviour
{
[SyncVar]
public Color color;
}
Selanjutnya, buat untuk menangani pemijatan.
using UnityEngine;
using UnityEngine.Networking;
public class MyNetworkManager : NetworkManager
{
public override void OnServerAddPlayer(NetworkConnection conn, short playerControllerId)
{
GameObject player = (GameObject)Instantiate(playerPrefab, Vector3.zero, Quaternion.identity);
player.GetComponent<Player>().color = Color.red;
NetworkServer.AddPlayerForConnection(conn, player, playerControllerId);
}
}
Fungsi NetworkServer.AddPlayerForConnection
tidak harus disebut dari dalam OnServerAddPlayer
. Selama objek koneksi yang benar dan playerControllerId
dilewatkan, dapat disebut setelah OnServerAddPlayer
telah kembali. Ini memungkinkan langkah asinkron untuk terjadi di antara, seperti memuat data pemain dari sumber data jarak jauh.
Meskipun dalam permainan yang paling multiplayer, Anda biasanya ingin satu pemain untuk setiap klien, HLAPIHigh Level API
Lihat di Glossary memperlakukan pemain dan klien sebagai konsep terpisah. Ini karena, dalam beberapa situasi (misalnya, jika Anda memiliki beberapa pengontrol yang terhubung ke sistem konsol), Anda mungkin perlu beberapa pemain GameObjects untuk koneksi tunggal. Ketika ada beberapa pemain pada satu koneksi, Anda harus menggunakan properti playerControllerId
untuk memberitahu mereka terpisah. Pengidentifikasi ini lingkup ke koneksi, sehingga peta ke ID pengontrol yang terkait dengan pemain pada klien itu.
Sistem secara otomatis memijat GameObject pemain yang dilewatkan ke NetworkServer.AddPlayerForConnection
pada server, sehingga Anda tidak perlu memanggil pemain. Setelah pemain siap, GameObjects jaringan aktif (yaitu, GameObjects dengan NetworkIdentityKomponen Jaringan yang memungkinkan Anda untuk menetapkan identitas ke GameObject Anda untuk jaringan untuk mengenalinya sebagai GameObject Pemain Lokal atau Server Hanya GameObject. More info
Lihat di Glossary terkait) dalam pemijatan 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 pada klien pemain. Semua GameObjects jaringan dalam permainan diciptakan pada klien itu dengan keadaan terbaru mereka, sehingga mereka disinkronkan dengan peserta lain dari permainan.
Anda tidak perlu menggunakan NetworkManager
untuk membuat pemain GameObjects. Anda dapat menggunakan metode yang berbeda untuk membuat pemain yang berbeda.
Selain pemain, koneksi klien juga memiliki state “ready”. Host mengirimkan klien yang siap informasi tentang pemijatan GameObjects dan pembaruan sinkronisasi negara; klien yang tidak siap tidak mengirim pembaruan ini. Ketika klien awalnya terhubung ke server, itu tidak siap. Meskipun dalam keadaan yang tidak dibaca ini, klien dapat melakukan hal-hal yang tidak memerlukan interaksi real-time dengan keadaan permainan pada server, seperti adegan pemuatan, memungkinkan pemain untuk memilih avatarAntarmuka untuk penargetan ulang animasi dari satu rig ke yang lain. More info
Lihat di Glossary, atau mengisi kotak log-in. Setelah klien telah menyelesaikan semua pekerjaan pra-game, dan semua Aset dimuat, dapat menghubungi untuk memasukkan state “ready”. Contoh sederhana di atas menunjukkan implementasi negara-negara siap; karena menambahkan pemain dengan NetworkServer.AddPlayerForConnection
juga menempatkan klien ke dalam keadaan siap jika belum dalam keadaan itu.
Klien dapat mengirim dan menerima pesan jaringan tanpa siap, yang juga berarti mereka dapat melakukannya tanpa memiliki pemain aktif GameObject. Jadi klien di menu atau layar pilihan dapat terhubung ke permainan dan berinteraksi dengannya, meskipun mereka tidak memiliki pemain GameObject. Lihat dokumentasi tentang Network messages untuk rincian lebih lanjut tentang mengirim pesan tanpa menggunakan perintah dan panggilan RPC.
Untuk mengganti pemain GameObject untuk koneksi, gunakan. Ini berguna untuk membatasi perintah bahwa pemain dapat mengeluarkan pada waktu tertentu, seperti dalam layar lobi pra-game. Fungsi ini mengambil argumen yang sama seperti AddPlayerForConnection
, tetapi memungkinkan ada untuk menjadi pemain untuk koneksi itu. Pemain lama GameObject tidak harus hancur. Menggunakan teknik ini untuk beralih dari GameObject ke pemain gameplay GameObject ketika semua pemain di lobi siap.
Anda juga dapat menggunakan ReplacePlayerForConnection
untuk menahan pemain setelah GameObject mereka hancur. Dalam beberapa kasus lebih baik untuk hanya menonaktifkan GameObject dan ulang atribut permainannya pada respawn. Sampel kode berikut menunjukkan cara mengganti GameObject yang hancur dengan GameObject baru:
class GameManager
{
public void PlayerWasKilled(Player player)
{
var conn = player.connectionToClient;
var newPlayer = Instantiate<GameObject>(playerPrefab);
Destroy(player.gameObject);
NetworkServer.ReplacePlayerForConnection(conn, newPlayer, 0);
}
}
Jika pemain GameObject untuk koneksi hancur, maka klien tidak dapat mengeksekusi Perintah. Mereka masih bisa mengirim pesan jaringan.
Untuk menggunakan ReplacePlayerForConnection
Anda harus memiliki GameObject untuk klien pemain untuk menjalin hubungan antara GameObject dan klien. Ini biasanya properti di kelas, tetapi jika pemain lama telah hancur, maka itu mungkin tidak tersedia.
Untuk menemukan koneksi, ada beberapa daftar yang tersedia. Jika menggunakan NetworkLobbyManager
, maka pemain lobi tersedia di . Juga memiliki daftar dan .