20 Ekim 2016 Perşembe

Unreal Engine Programlama Temelleri 2


bir önceki yazımızda değindiğimiz temellere kaldığımız yerden devam edelim;


UObject  &  Actor 
Actor ler AActor sınıfından miras alınmış sınıfların örnekleri (instance) dir. Sahne içinde konumlanabilen tüm GamePlay objelerinin  temel (base) sınıfıdır. Objeler de UObject sınıfından miras alınmış sınıfların örnekleridir; ve Unreal Engine deki tüm objelerin temel sınıfıdır; buna Actor ler de dahildir. Bu yüzden gerçekte Unreal Engine  içindeki tüm instance lar birer Object dir; fakat Actor terimi yaygın olarak AActor den devralınmış tüm sınıfların örneklerini ifade etmek için kullanılır iken, Object terimi AActor den  miras alınMAMIŞ sınıfların örnekleri / nesneleri (instance) için kullanılır. 

Bu hiyerarşileri içinde çoğunlukla AActor den miras alıp yeni sınıflar yaratacağız. Genellikle Object ler daha özel parçalar olarak düşünülür iken; Actor ler birer item/entity yani  "varlıklar" olarak düşünülebilir. Actor ler fonksyonelliklerinin belli yönlerini tanımlamak için veya normalde kolay yoldan yapamayacağı bir property koleksiyonu değerlerini tutmak vs. için sıklıkla özel Objeler olan Component leri kullanır. Bir araba örneğini ele alalım, arabanın tamamı bir Actor dür; buna karşılık tekerlekler ve kapılar gibi arabanın parçaları da bu Actor ün component leri yani bileşenleri dir. 


Gameplay Framework Sınıfları
Temel GamePlay sınıfları oyunu ve oyuncuları (players) temsil etmek için fonksyonalite içerir. Dostlar, düşmanlar, ve bu avatarları kontrol etmek için player input ve / veya AI (yapay zeka) kontrol girdileri, dahası değişik bakış açıları için kameralar sınıfları,  oyunun kurallarını belirlemek, ve oyunu ve oyuncuların sürecini takip etmek için de GameMode, GameState, ve PlayerState sınıfları mevcuttur. Tüm bu sınıflar sahne içine konumlanabilen ve level içinde ihtiyaç olduğunda yaratılan (spawn) olabilen Actor sınıfının tipleridir. 


Dost - Düşman, tüm Avatarlar:


Pawn
Pawn dünya (world) içinde etki gösterebilen bir Actor dür. Pawn lara Controller lar tarafından hükmedilir. Controller ile kolaylıkla input girişleri Pawn a ayarlanabilir. Bir Pawn ın ille de insanımsı (humanoid) olması şart değildir, her tip, şekil şemada olabilir.


Character
Bir Character, humanoid (insanımsı) stildeki bir Pawn dır. İlaveten bir CapsuleComponent ile birlikte gelir; ki bu ona collision (çarpışma event mekanizması) sağlar.
Bir Character,  CharacterMovementComponent e de sahiptir; ki bu da hareket sistemi ile ilgili kontroller içerir. Böylece temel humanoid benzeri hareketleri yapabilir; ve network içinde bu hareket bilgileri he tarafa kopyalanır (replike edilir), ve ila bazı animasyon ile ilgili fonksyonaliteye de sahiptir. Kısacası Character, Pawn ın daha geliştirilmiş, ve insan karakterine biraz daha yaklaştırılmış, özelleştirilmiş bir sınıftır.



Player Input veya AI ile Pawn Kontrolü: 


Controller
Controller da bir actor dür ve Pawn ın yönlendirmeden sorumludur. Tipik olarak iki güzel sınıfı vardır: AIController ve PlayerController.  Bir controller in bir pawn ın kontrolünü alma işlemine POSSESS hükmetme denir.


PlayerController

bir PlayerController, Pawn ile insan oyuncu arasındaki arabirimdir. Farklı bir deyim ile onun sayesinde oyuncu pawn ı kontrol edebilir. esasında PlayerController insan oyuncunun yapacaklarını temsil etmektedir.


AIController
Pawn ın yapay zeka tarafından kontrol edilmesi, farklı bir anlam ile simüle edilmiş kontrol mekanizmasıdır.




Oyunculara Bilgi Gösterme:



HUD

HUD kelimesi "heads-up display" ifadesinin başharflerinden gelmektedir. 2D görüntülerin bilgi mahiyetinde ekranda gösterilmesidir. Örneğin sağlık durumu, silah durumu, dürbün, mini harita vs.. vs.. her bir PlayerController tipik olarak bunlardan birine sahiptir.


Camera
PlayerCameraManager, oyuncu için bir tepegöz ya da göz küresidir. her PlayerController tipik olarak bunlardan birine de sahiptir.



Oyunun Kurallarını / Konseptini Belirleme ve Takibi:



GameMode

Oyun konsepti iki temel sınıfa ayrılır: GameMode oyunu tanımlayan sınıftır; oyunun kuralları ve kazanma şartlarının tanımını içerir. O sadece server üzerinde mevcut olur. Tipik olarak çok fazla oyun esnasında değişken olan dataya sahip değildir; ve kesinlikle client ların ihtiyacı olan geçici olan dataya da sahip değildir.


GameState
GameState, adı gibi oyunun durumunu tutan bir sınıftır. Örneğin bağlı oyuncularıun listesi, score tablosu, satrançtaki parçaların nerede olduğu, veya senin tamamladığın görevlerin hangileri olduğu vs… GameState hem game server üzerinde ve tüm clientlarda mevcut olur, ve kendini server dan tüm client lara sürekli replike ederek data larını sürekli olarak güncel tutar.


PlayerState
bir PlayerState oyuna katılanların (oyuncuların) durumunu tutan sınıflardır. Örneğin human player veya insan oyuncuyu simule eden herhangi bir player. AI oyuncular da oyunun bir parçasıdır ama PlayerState e sahip değildirler. PlayerState içindeki oyuncuya ayrılmış data örneğin oyuncu adını içerebilir, skorunu tutabilir, maç düzeyini örn: MOBA, veya capture the flag oyununda oyuncunun bayrağı taşıyıp taşımadığı bool datasını tutabilir. PlayerStete lerin datası tüm oyuncular için tüm makinelerde bulunur. bu hali ile PlayerController lardakinden farklı bir durum içindedirler. Ve PlayerState kendini sürekli replike yani sync halinde tutar.



Framework Class Ilişkileri:
bu gameplay sınıflarının birbirleri ile olan ilişkileri flowchartta görünmektedir. Bir oyun GameMode ve GameState den yapılır. İnsan oyuncu oyuna PlayerController lar ile birlikte katılır. bu PlayerController lar oyuncuara oyundaki Pawn ları (level içindeki fiziksel temsilcileri) kontrol etme yeteneği verir. PlayerController lar oyunculara input controlleri de verir , kamera bakışları veya HUD grafikleri ve PlayerCameraManager camera bakış yönetimi vs..








Actors
Actor level içine konumlandırılabilen herhangi bir objedir. Actor 3D geçişleri (translation, rotation, scale) destekleyen generic sınıflardır. Actor ler in level içinde yaratılmasına SPAWN denir. Actor ler dinamik olarak SPAWN olabilir ve DESTROY edilebilir. Bu Blueprint kodu ile veya C++ kodu ile sağlanabilir. C++ da AActor tüm aktörlerin base class ıdır.

birkaç farklı tipte Actor vardır. Örneğin: StaticMeshActor, CameraActor, PlayerStartActor vs..

Actor ler doğrudan transform (Location, Rotation, Scale) bilgilerini depolamaz. Actor ün transform dataları için (eğer var ise) Actor ün Root Component i kullanılır.

Actorleri Yaratma
AActor sınıfından yeni bir instance yaratmak SPAWNING fonksyonunu çağırır. Bu generic SpawnActor() fonksyonu kullanılarak veya bunun özel template veriyonu ile yapılır. GamePlay için AActor sınıfından örnek yaratılırken (spawn edilirken) çok çeşitli metodlar kullanılabilir. ileride anlatılacak.

Component 
Actor ler bir anlamda Object lerin özel tipleri tutan container lar gibi düşünülebilir ki bunlara Component ler denir. farklı tiplerdeki Component ler Actor lerin hareketlerini kontrol etmede, onların nasıl render edileceğini belirlemede, vs.. kullanılabilir. Actor lerin diğer temel / ana fonksyonları da property lerin replikasyonları ve oyun esnasındaki network içindeki fonksyon çağrılarıdır. Component ler yaratıldığında içeren Actor leri ile birleşiktir. bir kaç component tipi şunlardır:

UActorComponent
bu base component tir. Bir actor ün parçası olarak dahil edilebilir. Eğer istersek Tick leyebilir. ActorComponent ler belli bir Actor ile birleşiktir / ilişkilidir. ancak oyun dünyası içinde bir yer / konum teşkil etmezler. onlar genellikle kavramsal fonksyonellikler için kullanılırlar, AI veya oyuncu girişlerinin (input) yorumlanması gibi).

USceneComponent
SceneComponent leri de transforms ları olan ActorComponent leri dir. bir transform bilgisi dünya içinde bir pozisyon bilgisidir, location, rotation ve scale bilgisini içerir. SceneComponent leri hiyerarşik biçim içinde birbirlerine attaçh edilebilirler. bir Actor' ün location, rotation, ve scale bilgisi hiyerarşi içinde root da olan SceneComponent den alınır.

UPrimitiveComponent
PrimitiveComponent leri de grafik görselleştirme yeteceklerine sahip (örneğin particle system veya mesh gibi) SceneComponents leridir. pek çok ilginç fizik ve collision ayarı buradadır.

Actor ler SceneComponents hiyerarşisine sahip olmayı destekler. Her Actor bir RootComponent propertisine de sahiptir, ki bu özelliği hangi Component in eylemlerinin bu actor için root eylemler olacağını belirler. Actor lerin kendileri transform datası içermez ve bu nedenle locations, rotations, veya scales bilgileri yoktur, onun yerine, diğer component lerin transform bilgilerine güvenirler; daha özel olarak, root component lerine güvenirler. eğer bu component bir SceneComponent ise, Actor için transform bilgisini sağlar; aksi durumda, Actor transform datasına sahip olamaz. diğer atachlenmiş component ler attaçlandıkları componentte göre göreceli (relative) bir transform bilgisine sahip olur.


Root - SceneComponent: temel scene componenti Actor in dünya içindeki base lokasyonuna set etmek için.

StaticMeshComponent: altını reprezante etmek için.

ParticleSystemComponent: altına ataçlanan parlak particle eimmer.

AudioComponent: metalik ses yayıcı loop.

BoxComponent: Collision box, overlap eventinde altını almak için kullanılacak.


Ticking
tikleme Actor lerin UE de nasıl uodate olduğuna bakar. tüm Actor ler he bir frame de tickleme yeteneğine sahiptir yada minimum düzeyde de tikleyebilirler, kullanımı tanımlı aralıkta, sana hesapları güncellemene, veya gerekli aksiyonları almana izin verir. Actor ler default olarak Tick() fonksyonu ile tiklemektedir. ActorComponent leri de default olarak update olurlar. ancak onlar TickComponent() fonksyonunu kullanır bunu yapmak için.


Replication
replikasyon network işlemlerinde oyun dünya içindeki Actorleri sync halinde tutmaya yarar. property değerleri ve fonksyon çağrıları tümü birden replike edilebilir, tüm client lar üzerindeki oyun durumu üzerinde tam bir kontrol sağlamana bu şekilde izin verilir.


Destroying Actors
Actor ler genellikle garbage collecte edilmez. Oyun dünyası actor referansları listesini tutar.
Destroy() fonksyonunu çağırılması ile birlikte bir Actor açık bir şekilde yokedilebilir. bu onları level den kaldırır ve onları "pending kill" olarak işaretler, unun anlamı onların bir sonraki garbage collection da temizlenecekleridir.


evet arkadaşlar, burada geçen ki temel kavramlara bir miktar daha devam ettik; ki teorik bilgi sıkıcı da olsa aslında gereklidir. Eh.... burası da benim teorik not defterim :)  bir başka yazıda görüşmek üzere hoşçakalın.

Yorum Gönder