merbekta

Yeni üye
12 Nis 2016
41
25
0
(6) Ankara
Merhaba ! Aranıza yeni katıldım ve hem yeni başlık altında merhaba demek istedim hemde aklımdaki bir kaç soruya cevap bulmak. Unreal engine ile 2 yıl önce tanıştım biraz kurcalayıp bıraktım daha sonra Unity biraz kurcaladım  tabi iş yoğunluğundan dolayı ikisinde de ilerleyemedim. Uzun yıllar php ile web alanında çalıştım, android ile 2 yılımı geçirdim. C++ ile de bir mazimiz var tabi. Çok güzel projelerin arka planında güzel işler çıkarttık.  İlk programlamaya oyun yapabilmek umudu ile girmiştim ama kısmet olmadı web alanında geliştirdim hep projelerimi. Şimdi oyun alanında birşeyler yapmak istiyorum ve Unreal incelemeye başladım hatta ufak bir c++ network girişi yaptım hatta bir plugin yazdım. Genel çalışma mantığını anlamaya yaklaştığımı düşünüyorum. Şimdi sevgili kardeşlerim ben size buradan ara ara sorular soracağım bilginiz çerçevesinde beni aydınlatırsanız çok sevinirim.

İlk sorum şu araştırmalarım neticesinde network için şunlara hakim olmak gerekiyormuş

  • GameInstance
  • GameMode
  • GameState
  • Pawn
  • PlayerController
  • PlayerState

Bunlar hakkında edindiğim bilgi şu:

1:) Game Instance sunucuda ve her client da oluşturuluyor ve bir oyun başlatıldığında o oyun bitene kadar oyun hakkındaki skor vs. bilgileri tutabiliyoruz.

2:) Game mode sadece sunucu tarafında oluştuluyor ve oyunun  genel hatlarını belirliyor "hangi game instance kullanılacak vs gibi"

3:) Game state hakkında bilgim yok ama alırım bi dal

4:) Pawn ise oyun dünyasına eklenme olayı

5:) Player controller ise adında da anlaşılacağı üzere her oyuncu için yaratılıyor ve her oyuncunun kontrolünü sağlıyor."Görüş açısı vs"

6:) Player state ise oyuncunun kendisine has bilgilerin tutulabileceği "Çantada ki silahlar, sağlık vs" game state mantığında çalışan bir class


Bu konular hakkında bilgisi olan arkadaşlar yazarsa sevinirim.
 
merbekta' Alıntı:
1. Game Instance sunucuda ve her client da oluşturuluyor ve bir oyun başlatıldığında o oyun bitene kadar oyun hakkındaki skor vs. bilgileri tutabiliyoruz.
2. Game mode sadece sunucu tarafında oluştuluyor ve oyunun  genel hatlarını belirliyor "hangi game instance kullanılacak vs gibi"
3. Game state hakkında bilgim yok ama alırım bi dal
4. Pawn ise oyun dünyasına eklenme olayı
5. Player controller ise adında da anlaşılacağı üzere her oyuncu için yaratılıyor ve her oyuncunun kontrolünü sağlıyor."Görüş açısı vs"
6. Player state ise oyuncunun kendisine has bilgilerin tutulabileceği "Çantada ki silahlar, sağlık vs" game state mantığında çalışan bir class

Bu konular hakkında bilgisi olan arkadaşlar yazarsa sevinirim.

GameInstance, uygulama(oyun) ile birlikte yaşar. Level değiştikçe, değişmez. Birden çok örneği yoktur, yalnızca bir örneği bulunur yani Singleton'dır. En çok kullanılan yöntemleri Init() ve Shutdown() yöntemleridir. Bu yöntemler ile uygulama(oyun) başlarken ve biterken neler yapılacağı belirlenir(belirlenebilir). Özellikle de global veri tutmak için kullanılır. Network için Host ve Session gibi işlemlerin idaresinde tercih edilir. Ek olarak belirtmek gerekir ki bir de GameSingleton kavramı vardır ve ikisi birbiri ile karıştırılmamalıdır. GameSingleton diye bir class yoktur. Bunun yerine süper ana sınıfı UObject olan bir class ayarlarda GameSingleton olarak belirtilir. Init() ve Shutdown() gibi özel yöntemleri yoktur ve GameInstance'a nazaranEditör ile birlikte de yaşar. Genellikle başlangıç verilerini Editör üzerinden vermek için kullanılır.

PlayerState, oyuncu durumundan çok oyuncu istatistiklerini tutmak için vardır. Deathmatch FPS türü bir oyunda kaç kez ölmüş, kaç kez öldürmüş, kaç puan almış gibi bilgileri tutmak için vardır. Player var olduğu sürece tek bir örnekle vardır, o oyuncuya ait örneği değişmez. PlayerController üzerinde tutulur.
PlayerController, oyuncunun oyun içerisindeki mantıksal varlığını temsilen vardır. Oyunda ölmüş olabilirsiniz, yeni başlamış ama oynamaya başlamamış olabilirsiniz. Oyunu o an oynamıyor bile olsanız; PlayerController oyun içerisinde vardır ve Pawn'ın idaresinden sorumludur. Oyuncunun giriş aygıtları ile Pawn'ı kontrol etmesini sağlayan InputComponent tamamen PlayerController'a ait bir bileşendir.
Pawn, oyuncunun oyun içerisindeki fiziksel/görsel varlığını temsilen vardır. Sadece özel olarak Spectator modunda boştur. Spectator modu hayalet modu gibi düşünülebilir. Hayalet modunda CS gibi kimseye gözükmeyen etrafta serbest dolaşan bir Pawn oluşturmak yada belki kimseye etki edemeyen ama hayalet gibi gözüken bir Pawn oluşturmak oyun geliştiricinin tercihine bağlıdır. Oyunda ölmüşseniz normal Pawn'ınız(DefaultPlayerPawn) ölmüş demektir, yok edilir. PlayerController, SpectatorPawn'ınızın idaresini alır. Tekrar oyun içerisine dahil edileceğinizde normal Pawn'ınız spawn edilir ve PlayerController bu Pawn'ın idaresini alır. İşte bu noktada PlayerState üzerinde eşya, can gibi bilgilerin tutulmaması gerektiği açıklığa kavuşur. Oyuncu karakteri(Pawn) öldüğünde Pawn yok olur PlayerState, PlayerController üzerinde bulunduğundan yok olmaz. Bu yüzden envanteri yada sağlık bilgisini Pawn'da tutmak gerekir. Gerçekçi düşünüldüğünde envanter de karakteri üzerinde taşınmalıdır ve onunla birlikte yok olmalıdır. Aksi halde karakter öldüğünde PlayerState üzerindeki eşyaları da yok etmek için ek uğraşlar gerektirecektir. Karakter ölse de korunması gereken bazı bilgiler yine PlayerState'de tutulmalıdır. Örneğin karakter deneyimi(experience) yada seviyesi(level) gibi... elbette bunlar oyunun türü ile de ilgilidir ve şunu da belirtmeliyim ki birçok oyun, karakteri respawn etmez, istatistik de tutmaz, bölümü yeniden başlatır. Bu tür oyunlarda yazılımsal tasarım çok detay gerektirmediğinden, usule uymak gibi bir zorunlulukları yoktur. Hatta hiçbir oyun türü için bu kuralların çoğu zorunluluk değildir sadece işleri kolaylaştırmak içindir.

GameState, tıpkı PlayerState gibi ama oyuncu değil oyun istatistiklerini tutar. Örneğin bölüme(level/map) ne zaman başlandı, kaç tur oynandı...gibi(bu istatistikler kendiliğinden yok elbette, geliştiricinin yazması beklenen örneklerdir). GameMode ise bölümün idaresinden sorumludur. Oyuncuyu x bölgesine spawn etmek, haritayı değiştirmek...vb gibi. GameState, GameMode sınıfının bir üyesidir. GameMode, dolayısı ile GameState bölüm ile birlikte yaşar. Her bölüme başlarken yeni bir örneği oluşturulur, eski örnekler yok edilir. Çok oyunculu oyunlarda, sadece sunucu tarafında oluşturulur(tek oyunculu oyunlarda client aynı zamanda server gibi düşünülebilir yada bu ayrımı yapmaya gerek yoktur). GameMode, varsayılan HUD, PlayerController, Pawn...gibi sınıfları da içerisinde barındırır. Varsayılan sınıfların belirlenmesi ile oyun kuralları ve oynanışı esnek bir biçimde belirlenebilir. Örneğin strateji oyunlarında XGameMode sınıfı oyun içi varsayılan strateji Pawn'ı, PlayerController'ı belirlerken, YGameMode harita ve senaryo oluşturma için kullanılabilir. Böylece tek bir level zerinde 2 farklı oyun/oynanış belirlenebilir. Bir diğer örnek ise menü için verilebilir. Oyun için InGameGameMode ve menü için MenuGameMode isimli iki farklı GameMode sınıfı oluşturulup ana menü yönetimi ve oyun yönetimi kolaylıkla betimlenebilir.

Son olarak belirtmek gerekir ki UE4 üzerinde bulunan buna benzer sınıfların birçoğu, oyun geliştirmede yazılması beklenen sınıflar için işleri kolaylaştırmak adına yazılmıştır. Pawn yerine Actor bile kullanabilirsiniz ama bütün Posses kurallarını kendiniz tanımlamalısınız(Unity gibi oyun motorlarında olduğu gibi). Bu yüzden UE4 zor gibi gelir, ancak; bu kuralları öğrendiğinizde işleri ne kadar kolaylaştırdıklarını farkedersiniz. Bir de deneyimli birçok yazılımcı, kapsamlı projelere başlamadan önce bu yapıların tamamını bütünü görmek için eksiksiz öğrenmeye çalışır. Bu yazılım geliştirmede doğru tasarım yapmanın gereğidir ama özellikle UE4 için zordur. UE4 kurallarına uymadan bir yerden başlayıp deneme yanılma yöntemi ile ilerlemek daha yararlıdır. Örneğin oyuncu puanını bilmeden Pawn üzerinde tutabilirsiniz. Sistem çalışır ancak zamanla diğer türlüsünün daha kolay olduğunu görmeye başlarsınız.
 
Sevgili kardeşim verdiğin güzel bilgiler için çok teşekkür ederim. Emek verip uzun uzun yazmışsın  gerçekten çok işime yaradı ve kafamda ki bir çok soruya cevap oldu. Seninde belirttiğin gibi biz programcılar herşeyi a dan z ye öğrenmeye çalışıyoruz ve bunun avantajları olduğu kadar dezavantajları da oluyor. Şu an ufak çaplı login ekranı ve lobby ile uğraşıyorum ve bu sistemin genel mantığını anlamama yardımcı oluyor. Aslında dediğin gibi unreal bize kolaylık olması açısından bir çok şeyi hazır hala getirmiş ama bu bizim için ilk zamanlar yardımcıdan ziyada kargaşaya neden oluyor. Belki unity gibi rahat bıraksa bu kadar zorlanmayız :) Tekrar çok teşekkür ediyorum