Unity Mirror - Authority

Unity Mirror - Authority

Unity Mirror - Authority

Ağ Yetkisi

Yetki, bir nesneye kimin sahip olduğunu ve üzerinde kontrol sahibi olduğunu belirleme yoludur.

Sunucu Yetkisi

Sunucu yetkisi, sunucunun bir nesne üzerinde kontrol sahibi olduğu anlamına gelir. Sunucu, bir nesne üzerinde varsayılan olarak yetkiye sahiptir. Bu, sunucunun toplanabilir öğeleri, hareketli platformları, yapay zeka karakterlerini ve oyuncu olmayan diğer ağ nesnelerini yöneteceği anlamına gelir.

İstemci Yetkisi

İstemci yetkisi, istemcinin bir nesne üzerinde kontrol sahibi olduğu anlamına gelir.

Bir istemci, bir nesne üzerinde yetkiye sahip olduğunda, Komutları çağırabilir ve nesnenin istemci bağlantısı kesildiğinde otomatik olarak yok edileceği anlamına gelir.

Bir istemcinin bir nesne üzerinde yetkiye sahip olması durumunda bile sunucu, SyncVar'ı kontrol eder ve diğer serielleştirme özelliklerini kontrol eder. Diğer istemcilere senkronize olması için bir bileşenin sunucudaki durumu güncellemek için Komutlar kullanması gerekecektir.

Yetki nasıl verilir?

Varsayılan olarak, sunucu tüm nesneler üzerinde yetkiye sahiptir. Sunucu, istemcinin kontrol etmesi gereken nesneler, örneğin oyuncu nesnesi gibi nesnelere yetki verebilir.

NetworkServer.AddPlayerForConnection kullanarak bir oyuncu nesnesi oluşturursanız, otomatik olarak yetki verilecektir.

NetworkServer.Spawn kullanma

Bir nesne oluşturulduğunda bir istemciye yetki verebilirsiniz. Bunun için oluşturma iletişimini geçerken bağlantıyı iletmelisiniz.

GameObject go = Instantiate(prefab);

NetworkServer.Spawn(go, connectionToClient);

identity.AssignClientAuthority kullanma

AssignClientAuthority kullanarak herhangi bir zamanda bir istemciye yetki verebilirsiniz. Bunu yetki vermek istediğiniz nesne üzerinde AssignClientAuthority'i çağırarak yapabilirsiniz.

identity.AssignClientAuthority(conn);

Bunu bir oyuncunun bir öğeyi aldığında yapmak isteyebilirsiniz.

// Oyuncu nesnesindeki Komut

void CmdPickupItem(NetworkIdentity item)

{

    item.AssignClientAuthority(connectionToClient); 

}

Yetkinin nasıl kaldırılacağı

identity.RemoveClientAuthority kullanarak bir nesneden istemci yetkisini kaldırabilirsiniz.

identity.RemoveClientAuthority();

Oyuncu nesnesinden yetki kaldırılamaz. Bunun yerine, NetworkServer.ReplacePlayerForConnection kullanarak oyuncu nesnesini değiştirmeniz gerekecektir.

Yetki Hakkında

Bir nesneye yetki verildiğinde veya yetki nesneden kaldırıldığında, bu istemciye bir bildirim mesajı gönderilir. Bu, OnStartAuthority veya OnStopAuthority işlevlerinin çağrılmasına neden olur.

Yetkinin Kontrol Edilmesi

İstemci Tarafı

identity.isOwned özelliği, yerel oyuncunun bir nesne üzerinde yetkiye sahip olup olmadığını kontrol etmek için kullanılabilir.

Sunucu Tarafı

identity.connectionToClient özelliği, bir nesne üzerinde yetkiye sahip olan istemciyi kontrol etmek için kontrol edilebilir. Null ise, sunucunun yetkiye sahip olduğunu gösterir.