Network Authority
Sinkronisasi Negara Tingkat Lanjut

Sinchronisasi negara

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 .

Sinchronisasi negara mengacu pada sinkronisasi nilai-nilai seperti bilangan bulat, nomor titik mengambang, string dan nilai-nilai boolean milik 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 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 Anda.

Sinkronisasi negara dilakukan dari Server ke klien jarak jauh. localclient tidak memiliki data serialisasi untuk itu. Tidak perlu, karena saham 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
dengan server. Namun, kait SyncVar disebut pada klien lokal.

Data tidak disinkronkan dalam arah yang berlawanan - dari klien jarak jauh ke server. Untuk melakukan ini, Anda perlu menggunakan Commands.

SyncVars

SyncVars adalah variabel skrip yang mewarisi dari NetworkBehaviour, yang disinkronkan dari server ke klien. Ketika GameObject ditidur, atau pemain baru bergabung dengan permainan dalam kemajuan, mereka mengirim keadaan terbaru dari semua SyncVars pada objek jaringan yang terlihat oleh mereka. Gunakan atribut kustom [SyncVar] untuk menentukan variabel mana di script Anda yang ingin disinkronkan, seperti ini:

pemain kelas: NetworkBehaviour Sitemap

[SyncVar]
int health;

public void TakeDamage(int amount)
{
    if (!isServer)
        return;

    health -= amount;
}

}

Negara SyncVars diterapkan pada GameObjects pada klien sebelum OnStartClient() disebut, sehingga keadaan objek selalu up-to-date di dalam OnStartClient().

SyncVars dapat tipe dasar seperti integers, string dan mengapung. Mereka juga dapat menjadi tipe Unity seperti vektor3 dan struct yang ditentukan pengguna, tetapi pembaruan untuk struct SyncVars dikirim sebagai pembaruan monolitik, tidak perubahan inkremental jika bidang dalam perubahan struct. Anda dapat memiliki hingga 32 SyncVars pada satu skrip NetworkBehaviour, termasuk SyncLists (lihat bagian berikutnya, di bawah).

Server secara otomatis mengirimkan pembaruan SyncVar ketika nilai perubahan SyncVar, sehingga Anda tidak perlu melacak ketika mereka mengubah atau mengirim informasi tentang perubahan diri.

SyncLists

Sementara SyncVars mengandung nilai, SyncLists mengandung daftar nilai. Konten SyncList disertakan dalam pembaruan state awal bersama dengan negara SyncVar. Sejak SyncList adalah kelas yang mensinkronkan kontennya sendiri, SyncLists tidak memerlukan atribut SyncVar. Jenis-jenis SyncList berikut tersedia untuk jenis dasar:

  • SyncListString

  • SyncListFloat

  • SyncListInt

  • SyncListUInt

  • SyncListBool

Ada juga SyncListStruct, yang dapat Anda gunakan untuk menyinkronkan daftar jenis struct Anda sendiri. Saat menggunakan SyncListStruct, tipe struct yang Anda pilih dapat berisi anggota tipe dasar, array, dan tipe Unity umum. Mereka tidak dapat mengandung kelas kompleks atau wadah generik, dan hanya variabel publik dalam struktur ini serialisasi.

SyncLists memiliki delegate yang dinamakan SyncListChanged yang memungkinkan klien untuk diberitahukan ketika isi dari perubahan daftar. Delegate ini disebut dengan jenis operasi yang terjadi, dan indeks item yang operasinya.


public class MyScript : NetworkBehaviour
{
    public struct Buf
    {
        public int id;
        public string name;
        public float timer;
    };
            
    public class TestBufs : SyncListStruct<Buf> {}
    TestBufs m_bufs = new TestBufs();
    
    void BufChanged(Operation op, int itemIndex)
    {
        Debug.Log("buf changed:" + op);
    }
    
    void Start()
    {
        m_bufs.Callback = BufChanged;
    }
}
Network Authority
Sinkronisasi Negara Tingkat Lanjut