Klien dan server jaringan
Jaringan Discovery

Migrasi Host

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 .

Dalam permainan jaringan multiplayer tanpa server khusus, salah satu contoh permainan bertindak sebagai tuan rumah - pusat otoritas untuk permainan. Ini adalah pemain yang permainannya bertindak sebagai server dan "klien lokal", sementara pemain lain masing-masing menjalankan "klien jarak jauh". Lihat dokumentasi tentang konsep sistem jaringan untuk informasi lebih lanjut.

Jika host memutuskan dari permainan, gameplay tidak bisa melanjutkan. Alasan umum untuk host untuk memutuskan termasuk pemain host yang meninggalkan, proses host crash, mesin host mematikan, atau koneksi jaringan host kehilangan.

Fitur host migration memungkinkan salah satu klien jarak jauh untuk menjadi host baru, sehingga permainan multiplayer dapat terus.

How it works

Selama permainan multiplayer dengan migrasi host diaktifkan, Unity mendistribusikan alamat semua peers (pemain, termasuk tuan rumah dan semua klien) untuk semua rekan lain dalam permainan. Ketika host memutuskan, satu peer menjadi host baru. Peers lain kemudian terhubung ke host baru, dan permainan terus.

Komponen Jaringan Migrasi Manager menggunakan Jaringan Unity HLAPI. Ini memungkinkan permainan untuk melanjutkan dengan host baru setelah pemutusan host asli. screenshot di bawah ini menunjukkan keadaan migrasi yang ditampilkan di Manajer Migrasi Jaringan, di jendela InspectorJendela Unity yang menampilkan informasi tentang Pengaturan GameObject yang dipilih saat ini, aset atau proyek, memungkinkan Anda untuk memeriksa dan mengedit nilai. More info
Lihat di Glossary
.

The Network Migration Manager component
Komponen Jaringan Migrasi Manager

Jaringan Migrasi Manager menyediakan antarmuka pengguna dasar, mirip dengan Jaringan Manajer HUD. Antarmuka pengguna ini adalah untuk pengujian dan prototyping selama pengembangan game; sebelum Anda melepaskan permainan Anda harus menerapkan antarmuka pengguna kustom untuk migrasi host, dan logika kustom untuk tindakan seperti memilih host baru secara otomatis tanpa memerlukan masukan dari pengguna.

The Network Migration Manager prototyping HUD
Jaringan Migrasi Manager prototyping HUD

Meskipun migrasi mungkin terjadi karena host lama kehilangan koneksi atau berhenti permainan, dimungkinkan untuk tuan rumah lama dari permainan untuk mengajoin permainan sebagai klien di host baru.

Selama migrasi host, Unity mempertahankan keadaan dan pada semua 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
jaringan 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
. Ini juga berlaku untuk data serialisasi kustom untuk GameObjects.

Unity menonaktifkan semua pemain GameObjects dalam permainan ketika host memutuskan. Kemudian, ketika klien lain melihat permainan baru di host baru, pemain yang sesuai Unit dapat digunakan kembali klien-klien di host baru, dan memijat mereka di klien lain. Ini memastikan bahwa Unity tidak kehilangan data state pemain selama migrasi host.

CATATAN: Selama migrasi host, Unity hanya menyimpan data yang tersedia untuk klien. Jika data hanya pada server, maka tidak tersedia untuk klien yang menjadi host baru. Data pada host hanya tersedia setelah migrasi host jika di SyncVars atau SyncLists.

Ketika klien menjadi host baru, Unity memanggil fungsi callback OnStartServer untuk semua GameObject jaringan. Pada host baru, Manajer Migrasi Jaringan menggunakan fungsi BecomeNewHost untuk membangun adegan server jaringan dari keadaan di ClientScene saat ini.

Dalam permainan dengan migrasi host diaktifkan, peers diidentifikasi oleh Login Login mereka di server. Ketika klien terhubung kembali ke host baru dari permainan, Unity melewati koneksi ini Id ke host baru sehingga dapat mencocokkan klien ini dengan klien yang terhubung ke host lama. Id ini adalah pada ClientScene sebagai Login Login.

Non-Player GameObjects

Non-player GameObjects dengan otoritas klien juga ditangani oleh migrasi host. Unity menonaktifkan dan re-enables klien-dimiliki non-player GameObjects dengan cara yang sama itu menonaktifkan dan pemain kembali GameObjects.

Mengidentifikasi Peers

Sebelum pemutusan host, semua peer terhubung ke host. Mereka masing-masing memiliki koneksi yang unik Id di host - ini disebut Login Login dalam konteks migrasi host.

Ketika Jaringan Migrasi Manager memilih host baru, dan rekan-rekan untuk itu, mereka menyediakan oldConnectionId mereka untuk mengidentifikasi peer mana mereka. Ini memungkinkan host baru untuk mencocokkan klien yang menghubungkan kembali ini ke GameObject pemain yang sesuai.

Host lama menggunakan oldConnectionId khusus dari nol untuk menghubungkan kembali - karena tidak memiliki koneksi ke host lama, itu WAS host lama. Ada ClientScene.ReconnectIdHost konstan untuk ini.

Ketika Anda menggunakan antarmuka pengguna built-in Jaringan Migrasi Manager, Manajer Migrasi Jaringan menetapkan oldConnectionId secara otomatis. Untuk mengaturnya secara manual, gunakan Login Login Sitemap atau ClientScene.SetReconnectId.

Aliran Migrasi Host

  • Login Sebuah host Game1, permainan dengan migrasi host diaktifkan

  • Login B memulai klien dan bergabung Game1

    • Login B diberitahu tentang peers (MachineA-0, dan diri (MachineB)
  • Login C memulai klien dan bergabung Game1

    • Login C diberitahukan tentang peers (MachineA-0, MachineB–1, dan diri (MachineC) -2)
  • Login Turunkan koneksi pada Game 1, jadi tuan rumah memutuskan

  • Login B memutuskan dari host

    • Login Fungsi callback B diinjak pada MigrationManager pada klien

    • Login B pemain GameObjects untuk semua pemain dinonaktifkan

    • Login B tinggal di tempat kejadian online

  • Login B menggunakan fungsi utilitas untuk memilih host baru, memilih diri

    • MesinB panggilan MenjadiNewHost()

    • Login B mulai mendengarkan

    • Login B pemain GameObject untuk diri diaktifkan

    • Login Pemain untuk MachineB sekarang kembali dalam permainan dengan semua keadaan lama

  • Login C akan memutuskan dari host

    • Login Fungsi callback C diinjak pada MigrationManager pada klien

    • Login C pemain GameObjects untuk semua pemain dinonaktifkan

    • Login C tinggal di tempat kejadian online

  • Login C menggunakan fungsi utilitas untuk memilih host baru, mesin picks Login

    • Login C terhubung kembali ke host baru
  • Login B menerima koneksi dari MesinC

    • Login C mengirim pesan rekoneksi dengan lamaConnection Id (dalam pesan AddPlayer)

    • fungsi callback diinvoked pada Migrasi Web server

    • Login B menggunakan oldConnection Id untuk menemukan pemain dinonaktifkan GameObject untuk pemain itu dan menambahkan kembali dengan ReconnectPlayerForConnection()

    • pemain GameObject adalah re-spawned untuk MachineC

    • Pemain untuk MesinC sekarang kembali dalam permainan dengan semua keadaan lama

  • Login pulih (musim lama)

    • Login Menggunakan fungsi utilitas untuk memilih host baru, memilih MachineB

    • MesinA "rekoneksi" ke MesinB

  • Login B menerima koneksi dari MachineA

  • Login Kirim pesan rekoneksi dengan lamaConnection Login

    • fungsi callback divoked pada MigrationManager pada server (MachineB)

    • Login B menggunakan oldConnection Id untuk menemukan pemain dinonaktifkan GameObject untuk pemain itu dan menambahkan kembali dengan ReconnectPlayerForConnection()

    • pemain GameObject adalah re-spawned untuk MachineA

    • Pemain untuk MachineA sekarang kembali dalam permainan dengan semua keadaan lamanya

Fungsi Callback

Fungsi panggilan balik pada JaringanHostMigrasi Login


// called on client after the connection to host is lost. controls whether to switch Scenes
protected virtual void OnClientDisconnectedFromHost(
    NetworkConnection conn, 
    out SceneChangeOption sceneChange)

// called on host after the host is lost. host MUST change Scenes
protected virtual void OnServerHostShutdown()

// called on new host (server) when a client from the old host re-connects a player
protected virtual void OnServerReconnectPlayer(
    NetworkConnection newConnection, 
    GameObject oldPlayer, 
    int oldConnectionId, 
    short playerControllerId)

// called on new host (server) when a client from the old host re-connects a player
protected virtual void OnServerReconnectPlayer(
    NetworkConnection newConnection, 
    GameObject oldPlayer, 
    int oldConnectionId, 
    short playerControllerId, 
    NetworkReader extraMessageReader)

// called on new host (server) when a client from the old host re-connects a non-player GameObject
protected virtual void OnServerReconnectObject(
    NetworkConnection newConnection, 
    GameObject oldObject, 
    int oldConnectionId)

// called on both host and client when the set of peers is updated
protected virtual void OnPeersUpdated(
    PeerListMessage peers)

// utility function called by the default UI on client after connection to host was lost, to pick a new host.
public virtual bool FindNewHost(
    out NetworkSystem.PeerInfoMessage newHostInfo, 
    out bool youAreNewHost)

// called when the authority of a non-player GameObject changes
protected virtual void OnAuthorityUpdated(
    GameObject go,
    int connectionId,
    bool authorityState)

Constraints

Untuk migrasi host untuk bekerja dengan benar, Anda perlu pergi ke komponen Network ManagerKomponen Jaringan yang mengelola state jaringan proyek. More info
Lihat di Glossary
GameObject dan mengaktifkan Auto Create Player. Data yang hanya hadir di server (host) hilang ketika pemutusan host. Untuk permainan dapat melakukan migrasi host dengan benar, data penting harus didistribusikan ke klien, tidak memegang secara rahasia di server.

Ini bekerja untuk permainan koneksi langsung. Pekerjaan tambahan diperlukan untuk ini untuk berfungsi dengan server matchmaker dan relay.

Klien dan server jaringan
Jaringan Discovery