Warning: Undefined array key "HTTP_ACCEPT_LANGUAGE" in /var/www/vhosts/bilgigunlugum.net/httpdocs/index.php on line 43
Unreal Engine

Unreal Engine Oyun Programlama sayfalarımız yayında...

Ana sayfa > Oyun programlama > Unreal Engine > Çalışma mantığı

Unreal Engine çalışma mantığı

Bu bölümde, Unreal Engine ile oluşturacağımız bir ThirdPersonShooter proje ile çalışma mantığını incelemeye çalışacağız.

Unreal Engine ile yeni bir proje oluşturmak için sırasıyla Epic Games Launcher, Unreal Engine ve Unreal Engine proje tarayıcısını çalıştırıp gerekli işlemleri yapmalıyız.

ThirdPersonShooter proje oluşturma

1. Epic Games Launcher'ı çalıştırıp, Launch butonuna tıklayarak, Unreal Engine'i başlatalım.

2. Açılan proje tarayıcı penceresinde,

  1. Sol taraftan GAMES seçeneğini ve orta bölümden ThirdPerson seçeneğini seçelim.
  2. BLUEPRINT
  3. Project Location ve Project Name (TPS_Test) değerlerini belirleyelim.
  4. BLUEPRINT seçili iken, Create butonuna tıklayarak projeyi oluşturalım.

Proje oluşturulduktan sonra aşağıdakine benzer bir pencere karşımıza gelir:

Yapılan işlemler neticesinde, aşağıda gösterilen dizin yapısında TPS_Test adlı bir proje oluşturulur.

4. "Content" dizini seçili iken, "+ Add" butonuna tıkladığımızda açılan menüde, "Add Feature or Content Pack..." seçeneğine tıklayarak açtığımız pencerenin "Content" sekmesindeki "Starter Content" seçeneğini seçip, "Add to Project" butonuna tıklayarak "Starter Content" paketini projemize ekleyelim.

Yapılan işlemler sonucunda, "Content" dizini altında içeriği 10 dizin olan "StarterContent" adlı bir dizin oluşturulur.

Viewport içerikleri

Açılan proje penceresinde, Content\ThirdPerson dizini içindeki Lvl_ThirdPerson level'ı açık durumdadır.

Outliner sekmesi altında aşağıda gösterilen çevre birimleri yer almaktadır.

  • Çevre birimleri (Lighting dizini altında)
  • StaticMeshActor nesneleri (Playground dizini altında)
  • PlayerStart
  • WorldDataLayers
  • WorldPartitionMiniMap

Level'ı çalıştırdığımızda, aşağıda sarı renkle gösterilen 10 adet nesne Outliner'a eklenir.

Level'ı Editor'da açtığımızda "Viewport" ve "Outliner" içinde herhangi bir karakter yer almamaktadır. ThirdPersonCharacter, Level çalıştıktan sonra Player Controller tarafından oluşturulur.

Projenin çalışmasını izleme

Projenin işlemleri hangi sırayla gerçekleştirdiğini izlemek için sırasıyla aşağıdaki işlemleri gerçekleştirelim:

Content Drawer içinde Content\ThirdPerson\Blueprints dizinindeki üç Blueprint dosyasını çift tıklayarak sırayla Editor'da açalım ve aşağıda gösterilen değişiklikleri yapalım.

Blueprint dosyaları açıldığında, sol tarafta, "Construction Script" FUNCTIONS bölümünde ve "Event Beginplay" ise "EventGraph" bölümünde yer alır.

1. BP_ThirdPersonGameMode dosyasına çift tıkladığımızda açılan pencerede "Construction Script" sekmesinde, "Construction Script" kutusu çıkışından fare ile sürükleyip açtığımız pencerede "Print String" seçeneğini seçerek açtığımız kutuda metin bölümüne "GameMode_Construction" ifadesini yazalım.

Karşınıza aşağıdakine benzer bir pencere gelirse, "Open Full Blueprint Editor" ifadesine tıklayarak, yukarıda gösterilen pencereye geçiş yapabilirsiniz.

2. BP_ThirdPersonGameMode dosyasına çift tıkladığımızda açılan pencerede "EventGraph" sekmesinde, sağ tıkladığımızda açılan pencerede "Event BeginPlay" seçeneğini seçerek bir "Event BeginPlay" kutusu oluşturalım. Kutu çıkışından fare ile sürükleyip açtığımız pencerede "Print String" seçeneğini seçerek açtığımız kutuda metin bölümüne "GameMode_BeginPlay" ifadesini yazalım.

3. BP_ThirdPersonPlayerController dosyasına çift tıkladığımızda açılan pencerede "Construction Script" sekmesinde, "Construction Script" kutusu çıkışından fare ile sürükleyip açtığımız pencerede "Print String" seçeneğini seçerek açtığımız kutuda metin bölümüne "BP_ThirdPersonPlayerController_Construction" ifadesini yazalım.

4. BP_ThirdPersonPlayerController dosyasına çift tıkladığımızda açılan pencerede "EventGraph" sekmesinde, "Event BeginPlay" kutu çıkışından fare ile sürükleyip açtığımız pencerede "Print String" seçeneğini seçerek açtığımız kutuda metin bölümüne "BP_ThirdPersonPlayerController_BeginPlay" ifadesini yazalım.

5. BP_ThirdPersonCharacter dosyasına çift tıkladığımızda açılan pencerede "Construction Script" sekmesinde, "Construction Script" kutusu çıkışından fare ile sürükleyip açtığımız pencerede "Print String" seçeneğini seçerek açtığımız kutuda metin bölümüne "BP_ThirdPersonCharacter_Construction" ifadesini yazalım.

6. Tüm Blueprint sınıf dosyalarını kaydedip, pencerelerin sol üst köşesindeki "Compile" butonu ile derleyelim.

7. BP_ThirdPersonCharacter dosyasına çift tıkladığımızda açılan pencerede "EventGraph" sekmesinde, sağ tıkladığımızda açılan pencerede "Event BeginPlay" seçeneğini seçerek bir "Event BeginPlay" kutusu oluşturalım. Kutu çıkışından fare ile sürükleyip açtığımız pencerede "Print String" seçeneğini seçerek açtığımız kutuda metin bölümüne "BP_ThirdPersonCharacter_BeginPlay" ifadesini yazalım.

Level'ı çalıştırdığımızda, önce üç Blueprint sınıfına ait tüm constructor fonksiyonlarının daha sonra BeginPlay fonksiyonlarının aşağıdaki sırayla çalıştığını ekranın sol üst köşesindeki ifadelerden (İşlem sırası alttan yukarı olmak üzere) ve Output Log üzerinde görebiliriz.

  • BP_ThirdPersonGameMode
  • BP_ThirdPersonPlayerController
  • BP_ThirdPersonCharacter

Unreal Engine ile oluşturulan bir projenin çalışma sırası ve Unreal Engine Oyun Oynama Çerçevesi hakkında buradan detaylı bilgi alabilirsiniz.

Construction Script ve Event BeginPlay karşılaştırması

Construction Script

Unreal Engine'deki Blueprint Construction Script, bir Blueprint sınıfının görsel olarak düzenlendiği, inşa edildiği ve ilk ayarlarının yapıldığı özel bir bölümdür. Blueprint'i düzenleme ekranında gördüğünüz Construction Script kutusu, aslında bir dizi komutun çalıştırıldığı bir fonksiyondur. Bu fonksiyon, Blueprint'in bir kopyası (instance) seviyede değişiklikler yapmak için kullanılır. Bu, oyun çalışmıyor olsa bile gerçekleşir.

Ne zaman ve nasıl oluşturulur?

Actor sınıfından türetilerek oluşturulan her sınıf için bir "Construction Script" tanımlanır.

Bir Blueprint sınıfı oluşturduğunuzda (örneğin bir Actor Blueprint'i), Construction Script otomatik olarak gelir. Bu bir başlangıç şablonudur. Siz bu kutuya düğümler ekledikçe, Unreal Engine bu komut zincirini derler.

Oluşturulma: Blueprint'i oluşturduğunuz anda Unreal Engine, bu özel fonksiyonun iskeletini hazırlar. Bu, bir Event BeginPlay gibi bir olay düğümü değildir.

Çalışma anı: Construction Script, editör içinde bir Blueprint'i sahnede hareket ettirdiğinizde, döndürdüğünüzde, ölçeklendirdiğinizde veya herhangi bir parametresini değiştirdiğinizde hemen çalışır. Aynı zamanda, oyunu başlattığınızda (play mode) Event BeginPlay'den önce bir defa daha çalışır.

Çalışma mantığı ve kullanım alanları

Construction Script'in ana amacı, editörde yaptığınız değişikliklerin görsel olarak anında yansımasını sağlamaktır. Bu, oyun geliştiricisinin işini inanılmaz derecede hızlandırır. Örneğin:

  • Dinamik nesne oluşturma: Diyelim ki bir duvar Blueprint'i yapıyorsunuz. Bir "Duvar Uzunluğu" değişkeni eklediniz. Construction Script içinde, bu değişkeni kullanarak duvarın uzunluğunu ayarlayabilir ve buna göre kaç tane tuğla objesi oluşturulacağını belirleyebilirsiniz. Bu sayede sahnede değişkenin değerini değiştirdiğiniz anda, duvarın boyutu anında güncellenir.
  • Ayarları anında görselleştirme: Bir ışık Blueprint'i tasarladınız. Işığın rengini, parlaklığını veya menzilini değiştirdiğinizde, Construction Script sayesinde sahnedeki ışığın bu yeni ayarlara göre nasıl göründüğünü hemen görebilirsiniz.
  • Bağlantılı parçalar: Bir köprü Blueprint'i düşünün. Köprü parçasının uzunluğu gibi bir değişkeni değiştirdiğinizde, Construction Script otomatik olarak diğer köprü parçalarını buna göre uzatıp kısaltabilir veya ekleyebilir.

Aşağıdaki işlemleri gerçekleştirdiğimizde Construction Script çalışır ve tüm çıktılar Output Log'da görünür.

  • Actor sınıfından türetilmiş bir Blueprint sınıfını sürükleyip Viewport'a bıraktığımızda,
  • Sahnedeki Blueprint sınıfının yerini değiştirdiğimizde, döndürdüğümüzde ve boyutunu değiştirdiğimizde,
  • Sahnedeki Blueprint sınıfı için public ve değiştirilebilir özellikte bir değişken oluşturduğumuzda, Editor'da değişken değerini her değiştirmemizde.

Özetle, Construction Script, editör ortamında bir Blueprint nesnesinin anlık olarak "yapılandırılmasını" sağlayan bir işlevdir. Bu, oyun içindeki Event Graph'ta yer alan olaylardan farklıdır. Event Graph genellikle oyun başladığında, bir tuşa basıldığında veya bir olay tetiklendiğinde çalışırken, Construction Script'in ana görevi editörde görsel ve işlevsel bir geri bildirim sağlamaktır.

Event BeginPlay

Event BeginPlay, oyun başladığında (veya bir Blueprint'in oyun sırasında "spawn" edildiğinde) yalnızca bir kez çalıştırılan bir olaydır. Bu, bir Blueprint'in oyun mantığının başladığı noktadır.

Kullanımı

  • Oyun başlangıcında: Bir karakterin başlangıç canını belirlemek, bir düşmanın hedef arama döngüsünü başlatmak veya bir kapı animasyonunu başlatmak gibi oyunla ilgili mantığı başlatmak için.
  • Oyun içinde: Oyuncunun etkileşimde bulunabileceği nesnelerin ayarlarını yapmak, örneğin bir toplanabilir eşyanın başlangıç konumunu belirlemek.
  • Ağ (Networking) işlemleri: Çok oyunculu bir oyunda, sunucu ve istemci arasında senkronize edilmesi gereken olayları başlatmak için.

GameMode sınıfları

BP_ThirdPersonGameMode içinde yer alan ve "Details" sekmesinde gösterilen sınıflar aşağıda gösterilmektedir: