Minor Major gibi numaralar bunlar.
En baştaki sayı mesela en büyük güncelleme. Mesela Unreal 4.23 ten Unreal 5.0.1 nasıl geçildi ? Motor komple değişti. Tasarım anlamında, yenilik anlamında. Teknoloji atladı.
Lumen geldi
Nanite geldi
Chaos geldi
Arayüz değişti.
Büyük bir sıçrama olduğundan 4 olan rakam 5 oldu. Ortadaki ise önemli olan güncellemeler için. Mesela 5.0.0 diyelim. Fakat Skeletal Mesh Editor diye bir sistem geldi motora o zaman 5.1.0 olur. Küçük güncellemelerde ise en sağdaki rakam oynar. Mesela bir sorun düzeltildi. Genellikle çok sık güncelleme alındığında sağdaki oynar. Sağdaki 9 olursa ortadaki 1 olur bu sefer. Çünkü küçük güncellemenin de bir sonu var bir şey 9 defa güncelleme aldıysa 10. Güncellemede artık büyük bir şey haline gelmiştir o.
Öyleyse 5.0.9 dan 5.1.0 olur. Önemli olanlar zaten ilk iki rakam. Üçüncüye fazla ihtiyacın yok aslında.
Bunu çok kafaya takmaya da gerek yok bazı oyunlarda rakam kısmı uzun oluyor.
248.068.04 gibi rakamlar var. Çift haneli rakam kullan yeterli.
1.0 versiyonundan başlat mesela önemli güncellemelerinde 1.1 , 1.2 diye git. Çok büyük bir güncelleme yaptığını düşünüyorsan. Mesela oyununa Trade sistemi eklemişsindir ve oyuncular artık takas, alım-satım işlemleri yapmaya başlıyordur. Bunun yanında birkaç hata çözmüşsündür birkaç bug ve biraz tasarım değişmiştir. O zaman 2.0 yaparsın fakat 2.0 versiyonunda da bir şeyler eksik diyelim ve sen yayınlamadın. Eksikleri tamamlarsın bu sefer 2.1 diye yayınlanır o.
Versiyon sadece yayınlarken artırılmaz aslında. Bir üst seviyeye geçildiğini diğer ekiplerle paylaşmaya yarar. Github gibi yerlerde çoklu ekip olduğunda kullanılır. En stabil versiyon hangisiyse onu paylaşırsın öyle kalır.
Oyun exesini sen kendin yapabilirsin istersen. Mesela Visual Studio üzerinden en basitinden Visual Basic adlı dil ile bir windows form ya da bat dosyası üzerinde çalış.
Uygulamanın simgesini oyununun simgesi yap. Orada da aynı şekilde versiyonlar yer alıyor build yaparken.
Kodun ise şöyle olacak.
Process.start(my.application.executablepath/game.exe) Sen aslında bir Launcher yapmış olacaksın. Oyununun da ayrı bir exesi yani Unreal exesi olacak. Bu Launcher ise o exeyi çalıştıracak.
Launcher dediğim şey External Launcher. Bunu Steamde de yayınlayabiliyorsun. Play dediklerinde öncelikle Launcherin çalışmasını sağlayabilirsin. Böylece Metin 2 gibi dışarıdan Login olan oyunlar yapabilirsin. Ya da Lol Clienti gibi şeyler.
Buradaki verileri Config belgesine yazdırabilir ve Unreal ile bunları çekebilirsin.
Bunu Phyton veya C++ ya da C# ile de yapabilirsin. Fakat ben en basitinden VB.Net ile yaparım bunu. Launcherinin illa bir görüntüsü olmasına gerek yok arkaplanda çalıştırabilirsin. Sadece oyunu açmasını sağlayabilirsin. Ya da oyununun exesini direkt olarak Visual Studio da düzenleyebilirsin. O exe dediğin şey sadece bir parametreden oluşuyor. Aynı parametreleri Custom bir exe ile de çalıştırabilirsin.
Peki Launcheri Unrealden yapamaz mıyız ? Mesela küçük pencere ile başlar sonrasında büyütürüz. Yaparsın. Fakat Launcherin External olma sebebi var.
1- Anlık olarak oyun açılmadan önce güncelleme yapabilmesi
2- Dosya doğrulayabilmesi ve dış kaynaklarla bağlantı kurabilmesi. Mesela Firebase mesela herhangi bir web sitesi veya veritabanı ile. Ya da güncellemenin çekileceği bir sunucu ile bağlantı kurabilmesi. Unreal bunları yapamaz yapması için Plugin gerekebilir.
3- Oyun başlamadan önce konfigürasyon ayarları yapabilmesi. Unrealde genelde Config anlık olarak set edilemeyebiliyor bazı şeyler için.
4- Haber ve Duyuru köşesi. Mesela bunu Unreal ile yaparsın evet. Fakat anlık olarak Webten bir sayfayı çekmesi istenebilir. Yada Sunucuya yüklenmiş verilerinizin çekilmesi gerekebilir. Bunu direkt oyun içinden yapmak ne kadar mantıklı bilemem. Oyun içinde sadece oyunu ilgilendiren verilerin çekilmesi gerekir.
5- Patch yapmak için Launcher mantıklıdır. Böylece adamın versiyonu uyumsuz ile oyunu başlatmasını engellersin. Ama zaten girilmiş oyun içinde bu sorun oluşturabilir. Anlık Patch getiremeyebilirsin. Ya da uygunlanmamış olabilir. Fakat Launcher her açıldığında oyunu ve versiyonu kontrol etse uygun olmadığında oyunu başlatmaya izin verdirmezsin mesela. Senkron çalışır. Dosyalar doğrulanır ve tamamen dosyalar sunucudaki gibi ise, Version 1 artar. Böylece o versiyon uygun ise oyun açılır. Sunucudaki versiyon 1.1 ise sendeki 1.0 ise açtırmazsın. Elindeki versiyon sunucudaki ile eşit olmalı. Arkaplanda bunu kontrol eden bir kod olacak.
Mesela sadece senin external launcherinden oyun başlayacak fakat normalden başlamayacak diyelim. O zaman ne yapman gerek ?
VBNET Kodu:
Dim startInfo As New ProcessStartInfo()
startInfo.FileName = "C:\OyunKlasörü\MyGame.exe"
startInfo.Arguments = "-launcherKey=ÖzelAnahtarKeyin"
Process.Start(startInfo)
Unrealde de bir şeyler yapman gerek mesela Blueprint içerisinde GameInstancede ilk yapılacak iş bu anahtarı kontrol etmek.
Event Begin Play > Get Command Line > Branch > Contains > "launcherKey" (ÖzelAnahtarKeyin)
False ise QuitGame.
Yani daha başlamadan kapanacak oyun.
Fakat Launcherden başlatılırsa parametreye bu key girilecek dolayısıyla kontrol sırasında girildiği de belli olacak. Böyle olunca da oyun açılacak. Ve sadece Launcherden açmış olacaksın.
Sana Özel Video Hazırladım :
Ekli dosyayı görüntüle 607
Mesela bu yöntem sayesinde adama öyle bir ban atarsın ki Clienti bile açamayabilir. Clienti açsa oyunu açamaz. Adamın anakart numarasını aldın diyelim ya da MAC adresini. Commandline ile kontrol edebilirsin ve açılışta o numara varsa adamı şutlarsın direkt. O Commandline Arrayını da sunucu ile senkron şekilde güncelleyebilirsin. Böylece orada MAC adresi bulunan cihazlar asla giriş yapamaz. Hatta Launcheri bile açamaz adam. Eğer internet bağlantısı varsa ve MAC adresi sunucudaki listede varsa Kapanır.
Son soruna da cevap vereyim. Oyunu Steamden paketleyip paylaşıyorsan eğer Unreal zaten her yaptığın işleme bir key atıyor. Misal veriyorum sen bir yere obje koydun onun keyi "A123B45C53" diyelim.
Steam bunları okuyor. Eğer key hala aynı ise onunla ilgili bir işlem gerçekleşmiyor. Farklı bir obje koyduysan onu güncelliyor. Yani aynı olan şeyler aynı kalırken farklı olanlar için yeni bir dosya upload edilir. Dolayısıyla sen full oyunu atacaksın o alması gereken yeri alıyor zaten merak etme. Sen yine 20 GB olan oyununu upload ettireceksin fakat o 19GB olan kısmı hızlıca Scan yapıp geçecek. Son farklı olan 1GB olan boyutu da 10 dakika içinde pakete dahil edip yükleyecek. Bitti gitti. Olay bu kadar. Yani oyuncuya yansıyan 1GB oldu o da sıkıştırıldı 300MB düştü. Açılınca 1GB oldu.