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

Unity'de NetworkBehaviour.isServer kullanarak sunucu tarafında özel kod çalıştırmayı öğrenin. Bu rehber, isClient, isServer ve isLocalPlayer değişkenlerini açıklayarak, çok oyunculu oyun geliştirmede sunucu-istemci mimarisini anlamanıza yardımcı olur. Örneklerle adım adım ilerleyin!

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.