Photon Engine ile Multiplayer Oyun Geliştirmeye Giriş

Unity’de multiplayer oyun geliştirmek istiyorsanız, Photon Engine en popüler çözümlerden biridir. Özellikle Photon Unity Networking (PUN), sunucu altyapısı ile uğraşmadan çok oyunculu oyunlar geliştirmeyi kolaylaştırır. Bu yazıda Photon PUN kullanarak multiplayer oyun geliştirmeye temel bir giriş yapacağız.

Photon Mimarisi

Photon, oyun sunucularınızı sizin yerinize yöneten bir bulut hizmetidir. Kendi sunucunuzu kurmak ve yönetmek zorunda kalmazsınız. Bu sayede oyun mantığınıza odaklanabilirsiniz.

Temel Akış

  1. Bağlantı: Oyuncu, Photon Master Server’a bağlanır.

  2. Lobi: Master Server, oyuncuyu uygun bir lobiye yönlendirir. Lobi, oyuncuların birbirini görmediği ve yalnızca oda listesinin görülebildiği bekleme alanıdır.

  3. Oda: Lobi üzerinden oyuncular bir odada buluşur. Oda, oyun oturumunun gerçekleştiği izole alandır.

Örnek: 4 kişilik bir yarış oyununda oyuncular önce lobiye gelir, daha sonra odalara girerler ve oyuna başlarlar.

Master Client ve Otorite

Odadaki ilk oyuncu Master Client olur. Master Client, oyun başlatma veya bazı oda ayarlarını değiştirme gibi ek yetkilere sahiptir. Eğer Master Client odadan çıkarsa, Photon otomatik olarak başka bir oyuncuyu Master Client yapar.

Kurulum ve Eşleştirme

1. AppID Alma ve Unity’ye Entegre Etme

  1. Photon Dashboard üzerinden ücretsiz bir AppID alın.

  2. Unity’de PUN 2 – Free paketini kurun.

  3. Kurulum sihirbazına AppID’yi yapıştırın.

2. Bağlantı Kodu

Unity’de genellikle Start() metodunda şöyle bağlanırsınız:

using Photon.Pun;

void Start() {
    PhotonNetwork.ConnectUsingSettings(); // Master Server'a bağlan
}

3. Lobiler ve Odalar

  • Lobby: Oyuncuların rastgele eşleştirildiği bekleme alanı.

  • Room: Oyun oturumunun gerçekleştiği alan.

Örnek fonksiyonlar:

// Lobiye bağlan
PhotonNetwork.JoinLobby(); 
    
// Rastgele oda bul veya oluştur
PhotonNetwork.JoinRandomOrCreateRoom(); 

// Belirli oda oluştur
PhotonNetwork.CreateRoom("Oda1", new RoomOptions { MaxPlayers = 4 }); 

Ağ Nesneleri ve Senkronizasyon

Multiplayer oyunlarda nesneleri ağ üzerinde senkronize etmek çok önemlidir. Bunun için PhotonView kullanılır.

PhotonView ve Instantiate

  • Ağda senkronize olacak her GameObject’in PhotonView bileşeni olmalıdır.

  • Normal Instantiate yerine PhotonNetwork.Instantiate kullanılır.

  • Prefab’ler Resources klasöründe olmalıdır.

PhotonNetwork.Instantiate("PlayerPrefab", spawnPosition, Quaternion.identity);
  • Oyuncular sadece kendi karakterlerini kontrol etmelidir:
if(photonView.IsMine)
  • Veri Senkronizasyonu

    Pozisyon, sağlık veya skor gibi veriler iki şekilde senkronize edilir:

    1. Gözlemleme (Observing): PhotonTransformView veya IPunObservable kullanarak veri paylaşılır.

    2. Güvenilirlik: Paketler reliable veya unreliable olarak gönderilebilir. Reliable garantili teslimat sağlar, unreliable ise daha hızlıdır ancak kayıp olabilir.

Olay İletişimi: RPC ve RaiseEvent

RPC (Remote Procedure Call)

RPC, bir nesnenin fonksiyonunu ağ üzerinden çağırır.

[PunRPC]
void TakeDamage(int amount) {
    health -= amount;
}
// Çağrı
photonView.RPC("TakeDamage", RpcTarget.All, 10);
  • RpcTarget.All: Herkese gönderir.

  • RpcTarget.Others: Sadece diğerlerine gönderir.

  • RpcTarget.MasterClient: Sadece Master Client’a gönderir.

RaiseEvent

RaiseEvent, belirli bir PhotonView’a bağlı olmayan genel olayları göndermek için kullanılır. Örneğin, “oyun başladı” mesajını tüm odadaki oyunculara iletmek için uygun bir yöntemdir.

İpuçları ve Öneriler

Photon PUN, özellikle hızlı prototipleme ve giriş seviyesindeki multiplayer projeler için mükemmel bir başlangıç noktasıdır. Bu rehberdeki kod örnekleri ve tablolar, oyunlarınızı adım adım oluşturmanızı kolaylaştırır. Daha büyük ve karmaşık projeler geliştirmeyi planlıyorsanız, Photon’un Fusion veya Quantum gibi gelişmiş çözümlerini de inceleyebilirsiniz.

Bir Yanıt Bırakın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir