2016-04-08 35 views
1

Sunucu karakterleri ve istemcinin karakterleri hakkında belirli bilgiler atamak istiyorum. Şimdi, oyuncunun ev sahibi mi yoksa müşteri mi olduğunu nasıl anlarım? isServer ve isClient kullanmayı denedim, ancak her ikisi de true. Bunlar kullanmam gereken doğru anahtar kelimeler mi? Bunun yerine oyuncu istemci olup olmadığını belirlemek için isClient kullanmanınOynatıcının sunucu veya istemci olup olmadığını belirleme

void Update() { 
     if(isServer){ 
      Debug.Log("I'm the server"); 
     } 

     if(isClient){ 
      Debug.Log("I'm the client"); 
     } 
} 
+0

Sınıfınız NetworkBehaviour'dan mi kalıyor? – marsh

+0

Evet, NetworkBehaviour'dan miras. – kmf

cevap

2

i yerine !isServer kullanın.

void Update() { 
     if(isServer){ 
      Debug.Log("I'm the server"); 
     } 

     if(!isServer){ 
      Debug.Log("I'm the client"); 
     } 
} 
1

bir "ev sahibi" olarak bağlanıyorsanız, gerçekte hem aynı anda "müşteri" ve "sunucu" sin. Bu, sunucu yetkilisi olarak hareket eden ancak "istemci" bağlantısını temsil etmeyen bir "özel sunucu" çalıştırmanın tersidir. Kendi cevap önermek gibi, isServer ve !isServer veya muhtemelen kullanabilirsiniz:

void Update() { 
    if (isServer) { 
     Debug.Log("I'm the server (or host)"); 
    } else { 
     Debug.Log("I'm the client"); 
    } 
} 
0

bu her durum için geçerlidir, bu yüzden bunları yapmazsa özür dileriz emin değilim - Ben NATTraversal adlı bir eklentiyi kullanıyorum Birlik ve benzer bir sorun yaşıyorduk. Ana bilgisayar olan bağlantıyı bulmam gerekiyordu. Ben röle sunucuları kullanarak değilim Ancak benim için .. Ben bu onay yapabilirsiniz bulundu Bu benim senaryoda çalışır

using UnityEngine.Networking; 

void Start(){ 
    if(NetworkServer.connections.Count > 0){ 
     Debug.Log("This is the host."); 
    } else { 
     Debug.Log("This is a client."); 
    } 
} 

(bu röle kaçınır sizin için olan) müşterinin bağlantısı nedeniyle liste boş, ancak ev sahibi değil. Bunu yapmak için daha iyi bir yol olabilir, ancak daha önce NetworkIdentity'nin oluşturulmuş bir listesi olmadan bir tanesini bilmiyordum.

Network.isServer bool, benim için her zaman false değerini döndürür; Umarım birileri dışarıda yardımcı olur.

Düzenleme: (Önemli bilgiler ekleme) Lütfen bunun, AFTER eşleştirmesinin ve bağlantıların kurulduğunu unutmayın.

Bunu yapmanın başka bir yolu, NATLobbyManager'da OnServerConnect dinlemenin bulunmasıdır.

public override void OnServerConnect(NetworkConnection conn){ } 

Yani etkinlik sadece bütün bunları anlamaya çalışırken bu süre rastlamak olabilir herkes için NATTraversal eklentisi ile ev sahibi daha fazla bilgi için tetikler. :)

İlgili konular