Unity Eğitim
Dersler
Forum Sınav Merkezi Premium 💎
Ağ Programlama

Unity'de NetworkBehaviour.isServer ile Sunucu Tarafı Kontrolü

Paylaşan: Unity Eğitim 22 September 2025 3 dakika okuma 147 görüntülenme

Merhaba Unity geliştiricileri! Bu yazıda, Unity'nin çok oyunculu oyun geliştirme sürecinde oldukça önemli bir role sahip olan NetworkBehaviour.isServer değişkenini detaylı bir şekilde inceleyeceğiz. Bu değişken, kodunuzun yalnızca sunucu üzerinde çalışmasını sağlamanıza olanak tanır ve sunucu-istemci mimarisinin temel bir unsurudur.

NetworkBehaviour.isServer Nedir?


NetworkBehaviour.isServer, bir NetworkBehaviour script'inin sunucu üzerinde çalışıp çalışmadığını belirten bir boolean değişkendir. Değeri true ise script sunucu üzerinde çalışmaktadır; false ise istemci üzerinde çalışmaktadır. Bu, sunucu ve istemci arasında farklı davranışlar uygulamanıza olanak tanır. Örneğin, oyun dünyasındaki nesnelerin oluşturulması, oyun mantığının uygulanması gibi işlemler genellikle sunucu tarafından kontrol edilmelidir.

isClient, isServer ve isLocalPlayer


NetworkBehaviour sınıfı, ağ bağlantısıyla ilgili birçok yararlı değişken sunar. Bunlardan en önemlileri şunlardır:

  • isServer: Script'in sunucu üzerinde çalışıp çalışmadığını gösterir.

  • isClient: Script'in bir istemci üzerinde çalışıp çalışmadığını gösterir.

  • isLocalPlayer: Script'in yerel oyuncunun kontrol ettiği nesne üzerinde çalışıp çalışmadığını gösterir.


Bu değişkenleri birleştirerek, farklı senaryolara özel kod blokları oluşturabilirsiniz. Örneğin, sadece sunucu tarafında çalışan bir fonksiyonu şu şekilde yazabilirsiniz:
using UnityEngine;
using Mirror;

public class MyNetworkBehaviour : NetworkBehaviour
{
void Update()
{
if (isServer)
{
// Sadece sunucu tarafında çalışacak kodlar buraya yazılır.
Debug.Log("Bu kod sadece sunucuda çalışıyor.");
}
}
}


isServer'ı Kullanarak Oyun Mantığını Uygulama


isServer değişkeninin en yaygın kullanım alanlarından biri, oyun mantığının sunucu tarafından kontrol edilmesini sağlamaktır. Bu, hile yapmayı engellemek ve oyunun bütünlüğü için çok önemlidir. Örneğin, bir oyuncunun sağlığını güncellemek, puanını değiştirmek veya bir nesneyi yok etmek gibi işlemler her zaman sunucu tarafından yapılmalıdır.
using UnityEngine;
using Mirror;

public class PlayerHealth : NetworkBehaviour
{
public int health = 100;

[Command]
public void CmdTakeDamage(int damage)
{
if (isServer)
{
health -= damage;
if (health <= 0)
{
RpcPlayerDied();
}
}
}

[ClientRpc]
void RpcPlayerDied()
{
// Oyuncunun öldüğünü istemcilere bildirin
Debug.Log("Oyuncu öldü!");
}
}


Bu örnekte, CmdTakeDamage fonksiyonu sadece sunucu tarafından çağrılabilir (Command attribute'ü sayesinde). Sunucu, hasarı işledikten sonra, RpcPlayerDied fonksiyonunu kullanarak tüm istemcilere oyuncunun öldüğünü bildirir (ClientRpc attribute'ü sayesinde).

Önemli Notlar



  • isServer değişkeni, bir NetworkBehaviour script'i içinde kullanılmalıdır.

  • Sunucu tarafında yapılan tüm değişiklikler, istemcilere senkronize edilmelidir (örneğin, Rpc fonksiyonları veya SyncVar değişkenleri kullanarak).

  • Güvenlik açısından, tüm kritik oyun mantığı sunucu tarafından kontrol edilmelidir.



Bu yazıda, NetworkBehaviour.isServer değişkeninin kullanımını ve önemini açıkladık. Umarım bu bilgiler, çok oyunculu oyun geliştirme yolculuğunuzda size yardımcı olur. Unutmayın, pratik yaparak ve farklı senaryolar deneyerek bu konuda daha fazla bilgi edinebilirsiniz.

🧠 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!