Unreal Engine Session

Yakın zamanda udemy üzerinde yer alan Unreal Engine Blueprint Eğitim Seti içerisinde bir konudan bahsetmiştim “Session” . Unreal Engine içerisinde yer alan bu session sistemi multiplayer oyunlar içerisinde sıkça kullanıldığı için multiplayer demek session demektir gibi anlaşılabiliyor. Özellikle yeni başlayanlar için epey kafa karıştırıcı olabiliyor.

Session Nedir ?

Session sadece Unreal Engine’e has bir konu değil. Hemen hemen tüm yazılımların içerisinde bulunan bir sistemdir. Yazılım içerisinde kişiye özel işlemler yapmak için sıkça kullanıyoruz. En basit ifade ile Twitter hesabınıza girdiğinizde size özel alanların açılması, paylaşım yaptığınızda sizin adınız üzerinden o paylaşımın yapılması gibi işlemler bu session aracılığı ile yapılıyor. Yani o site/yazılım üzerinde bir kimliğe sahip oluyorsunuz. Unreal Engine için de tam olarak olmasa da durum böyle.

Unreal Engine Session Nedir ?

Internet cafede oynadığımız counter strike 1.6 oyununu düşünün. Yeni nesil hatırlamayacaktır ama şimdiki csgo oyununun ilk sürümlerinden diyebiliriz 🙂 counter strike 1.6 için 2 seçenek vardı:

  1. Single player (botlara karşı)
  2. Multiplayer (oyunculara karşı)

Bizi ilgilendiren multiplayer kısmı. Multiplayer seçtikten sonra oyun kur alanına girerek bir oyun oluşturuyordunuz. Harita, oyuncu sayısı vs seçildikten sonra oyuncu gelmesini bekliyordunuz. Oyuncular geldikten sonra oyun başlıyordu. Burada bir kaç soru sormamız lazım:

  1. Bu oyuncular kurulan oyundan nasıl haberdar oldu ?
  2. Bu oyuncular, kurulan oyuna nasıl katılabildi ?

Oyuncuların haberdar olmasını sağlayan sistem Session sistemidir. Eğer herhangi bir alt sistem yani Online sub system kullanmıyorsak olacak olan senaryo şu şekildedir:

Sunucu vazifesi yapacak olan kişi Create Session dedikten sonra bir haritayı yayınlamaya başlayacaktır. Bu lobby veya oyun haritası olabilir. Daha sonra istemci find session dediğinde lokal ağ üzerinde yayın yapan bütün ipleri bulacak ve listeleyecektir. İstemci İçinden seçtiği herhangi bir oyuna join session diyerek bağlanacaktır. Diyeceksiniz ki ip nereden biliyor? Biraz önce lokal ağ üzerinde yayın yapan makinaları find session ile getirirken session result içine gerekli bilgileri kayıt etti. Bu şekilde hangi ip üzerinde hangi porttan hangi türde bir yayın yapıldığını biliyor. Bu bilgiler sayesinde istemci oyuna rahatlıkla katılabiliyor. Şimdi bir kaç soru daha gelmiş olması lazım aklımıza:

  1. Aynı lokal ağ üzerinde (yani aynı modeme bağlı 2 bilgisayar) olmadan nasıl çalışıyor ?

Cevap basit, çalışmıyor 🙂 Neden çalışasın ki ? Unreal engine aynı lokal ağ üzerinde çalışan makinaları bulabilir ama dünyanın bir ucundaki makinaları bulamaz.

  1. Peki Dünyanın bir ucundaki yayın yapan makinayı nasıl bulurum ?

Evet, bu sorunum cevabı da basit. Online sub system. Steam gibi hizmetler size bunu yapma imkanı veriyor. Eğer ini dosyanıza DefaultPlatformService=NULL yerine steam kullanacağınızı söylerseniz find session,create session gibi işlemler artık steam üzerinden yapılır.

Steam tam olarak bu işi nasıl yapıyor ?

Steam, yayın yapan tüm makinaların/oyuncuların session bilgilerini bir veritabanı üzerinde tutuyor. Yani create session işlemi yapıldığında o veritabanına gidip ip adresinizi ve port numaranızı yazıyor. Daha sonra dünyanın bir ucundaki oyuncu find session dediğinde o veri tabanındaki yayın yapan makinaları alıp oyuncuya gösteriyor. Artık bu oyuncu o liste içinden istediği oyuna bağlanabilir. Çünkü gerekli tüm bilgiler elinde var.

Peki steam kullanmadan kendimiz yapamaz mıyız ?

Yapılabilir tabi. Bir veritabanı oluşturup tüm session bilgilerini buraya kayıt edip istemcilerin buradan arama yapmasını sağlayabilirsiniz. Tabi bunun için Unreal engine konusunda deneyimli olmak lazım. Yeni başlayanlar için zor olabilir. Sadece bu kadarı yeterli değil tabi. Yayın yapacak makineyi dünyaya açmanız lazım. Bunun içinde ufak bir program yazmak gerekir. Bu program bilgisayarın 7777 portunu dünyaya açması gerekiyor ki istemciler bağlanabilsin. Tabi steam, epicgames sistemleri dururken bunlarla uğraşmak macera olur. Ama eğer ben kendimi geliştirmek için yapacağım diyen varsa ona sözüm yok.

O kadar şey anlattım ama görüldüğü üzere hiç biri de multiplayer konusunu doğrudan etkileyen şeyler değil. Sadece yayın yapan bir oyuncu sunucusuna nasıl katılınacağına etki eden bir sistem o kadar. Umarım aklınızda soru işareti kalmamıştır.

Youtube üzerinden makale videosuna erişebilirsiniz https://www.youtube.com/watch?v=fUg9KG7o4Vk