Unity Eğitim
Dersler
Forum Sınav Merkezi Premium 💎
C# Dersleri

Unity'de NetworkBehaviour.isServer ile Sunucu Tarafı İşlemlerini Kontrol Etme

Paylaşan: Unity Eğitim 16 September 2025 4 dakika okuma 140 görüntülenme

Merhaba Unity geliştiricileri! Bu yazıda, çok oyunculu oyun geliştirmede oldukça önemli bir yere sahip olan NetworkBehaviour.isServer özelliğini detaylı bir şekilde inceleyeceğiz. Bu özellik, kodunuzun sadece sunucu tarafında mı yoksa istemci tarafında mı çalıştırılacağını belirlemenizi sağlar ve bu sayede oyun mantığınızı daha güvenli ve verimli bir şekilde düzenlemenize olanak tanır.

NetworkBehaviour.isServer Nedir?


NetworkBehaviour.isServer, Unity'nin NetworkBehaviour sınıfının bir özelliğidir. Bu boolean değişken, bağlı bulunduğunuz oyun nesnesinin sunucu tarafında mı yoksa istemci tarafında mı çalıştığını gösterir. Değeri true ise kod sunucu tarafında, false ise istemci tarafında çalışmaktadır. Bu ayrımı yapmak, oyununuzun güvenliğini ve performansını artırmak için oldukça önemlidir.

Neden isServer Kullanmalıyız?


Oyun sunucusunun, istemcilerin yaptığı işlemleri doğrulama ve kontrol etme yetkisine sahip olması gerekir. Örneğin, bir oyuncu puanını kendi başına değiştirmeye çalışırsa, bu değişikliğin sunucu tarafından doğrulanması ve onaylanması gerekmektedir. NetworkBehaviour.isServer, bu tür durumları ele alarak sunucu tarafında güvenlik kontrolleri yapmanıza olanak tanır. Aynı zamanda, sadece sunucu tarafından yapılması gereken işlemleri (örneğin, oyun dünyasının durumunu güncellemek gibi) istemcilerden ayırmanıza yardımcı olur. Bu sayede, istemcilerde gereksiz hesaplamalar yapılmaz ve performans artışı sağlanır.

isServer'ı Nasıl Kullanırız?


NetworkBehaviour.isServer'ı kullanmak oldukça basittir. NetworkBehaviour sınıfından türetilen bir script'iniz varsa, bu script içinde if (isServer) bloğu kullanarak sadece sunucu tarafında çalışacak kodları yazabilirsiniz. Aşağıdaki örnek, sadece sunucu tarafında bir mesaj yazdıran basit bir kod parçasıdır:
using UnityEngine;
using UnityEngine.Networking;

public class ServerExample : NetworkBehaviour
{
void Update()
{
if (isServer)
{
Debug.Log("Bu mesaj sadece sunucuda görünür.");
}
}
}


Bu kod, sadece sunucu tarafında bulunan oyun nesnelerinde çalışacaktır. İstemci tarafındaki nesnelerde ise bu kod çalıştırılmayacaktır. Bu, istemcilerin sunucu verilerini manipüle etmesini engellemek için önemlidir.

Örnek Senaryo: Oyuncu Puanı Güncelleme


Bir çok oyunculu oyun düşünün. Oyuncular oyun içinde puan kazanıyor ve bu puanlar sunucuda saklanıyor. Bir oyuncu puanını kendi başına değiştirmeye çalışırsa, bu güvenlik açığına yol açabilir. Aşağıdaki örnekte, oyuncu puan güncellemesinin sadece sunucu tarafından yapıldığını görebilirsiniz:
using UnityEngine;
using UnityEngine.Networking;

public class PlayerScore : NetworkBehaviour
{
public int playerScore;

[Command]
public void CmdUpdateScore(int score)
{
if (isServer)
{
playerScore += score;
RpcUpdateScore(playerScore);
}
}

[ClientRpc]
void RpcUpdateScore(int score)
{
playerScore = score;
}
}


Bu örnekte, CmdUpdateScore fonksiyonu bir Command fonksiyonudur ve sadece sunucu tarafından çağrılabilir. Sunucu, puan güncellemesini doğruladıktan sonra, RpcUpdateScore fonksiyonu ile tüm istemcilere güncellenmiş puanı gönderir. Bu sayede, istemcilerin puanı kendi başlarına değiştirmeleri engellenir.

İstemci Tarafı İşlemler


!isServer koşulunu kullanarak istemci tarafında çalışacak kodları yazabilirsiniz. Bu, istemci tarafında yapılan hesaplamaları optimize etmek için kullanılabilir. Örneğin, istemci tarafında yapılan animasyon hesaplamaları, sunucu tarafında yapılmasına gerek kalmadan istemcide gerçekleştirilebilir. Bu durum, ağ trafiğini azaltır ve oyun performansını artırır.

Sonuç


NetworkBehaviour.isServer, Unity'de güvenli ve verimli çok oyunculu oyunlar geliştirmek için olmazsa olmaz bir özelliktir. Bu özelliği doğru kullanarak, sunucu ve istemci tarafındaki işlemleri ayrı ayrı yönetebilir, güvenlik açıklarını önleyebilir ve oyun performansınızı artırabilirsiniz. Umarım bu yazı, NetworkBehaviour.isServer'ı daha iyi anlamanıza yardımcı olmuştur!

🧠 Ders Sonu Değerlendirme Testi

Dersi tamamladıktan sonra bilgilerinizi test edin ve ekstra puanlar kazanın.

🔥 +50 XP Ödül
🔒

Sınava Katılmak İçin Giriş Yapın

Bu ders sonu testini çözebilmek, bilginizi test edip **+50 XP** kazanmak ve **Sınav Şampiyonu** rozetinin kilidini açmak için üye girişi yapmalısınız.

Yorumlar (0)

Yorum yazabilmek ve derslere katkıda bulunabilmek için giriş yapmalısınız.

İlk yorumu siz yapın!