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.