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.
Yorum Gönder