Bu kitapta Unreal Engine 4 oyun motoru genel bir biçimde tanıtılmıştır. Kitabın tüm hakları saklıdır, kaynak gösterilmeden kullanılamaz. İletişim için e-posta adresi:
[email protected] Pencere, düğme, sekme gibi pencere ile ilgili birim adları italik yazılmıştır. Karşılığı olmayan veya anlam bütünlüğü açısından yabancı dildeki karşılığı kullanılan sözcüklere özel ad olarak davranılmıştır.
i
1. GİRİŞ ................................. .................................................. ................................. ................................. .................................. .................................. ......................... ........ 1 1.1. Oyun Motoru Nedir? ............................... ................................................ .................................. .................................. ............................ ........... 1 1.2. Neden Unreal Engine 4? ....................... ....................................... ................................. .................................. ............................... .............. 2
1.3. Unreal Engine Tarihçesi ............................... ................................................ .................................. ................................. ...................... ...... 5 2. KURULUM ................................ ................................................. .................................. ................................. ................................. ................................ ............... 10
2.1. Windows’ta Kurulum ................................. .................................................. .................................. .................................. ....................... ...... 10 2.2. GNU/Linux’ta Kurulum ................................. .................................................. .................................. ................................. .................... .... 10 .................................................. .................................. ................................. ................................. ................................ ............... 12 3. İLK BAKIŞ ................................. 3.1. Epic Games Launcher ............................... ................................................ .................................. .................................. ....................... ...... 12 ................................................. .................................. .................................. ....................... ...... 13 3.2. Yeni Proje Oluşturma ................................
3.3. Editör İlk Bakış ................................ ................................................. ................................. ................................. .................................. ................... 15 4. BLUEPRINT ................................. .................................................. ................................. ................................. .................................. ............................. ............ 19
4.1. Blueprint Sınıfı ................................. .................................................. ................................. ................................. .................................. ................... 19 4.2. Level Blueprint ................................ ................................................. ................................. ................................. .................................. ................... 30
5. C++ VE OYUN İÇİ KÜTÜPHANE ............................... ................................................ .................................. ................................ ............... 33 5.1. Yeni C++ Sınıfı Oluş turmak ............................... ................................................ .................................. ................................ ............... 34 5.2. Temel Türler ................................. .................................................. .................................. ................................. ................................. ..................... .... 43 5.3. Temel Yapılar ............................... ................................................ .................................. ................................. ................................. ..................... .... 43 .................................................. ................................. .................................. .......................... ......... 45 5.4. Temel Konteynırlar ..................................
5.5. Temel Sınıflar ............................... ................................................ .................................. ................................. ................................. ..................... .... 46 6. STATIC MESH ............................ .............................................. .................................. ................................. ................................. ............................. ............. 54 7. MATERIAL ................................ ................................................. .................................. ................................. ................................. ................................ ............... 57 .................................................. ................................. ................................. ................................ ............... 57 7.1. Material Editörü .................................
7.2. Material’i Meshe Uygulamak ............................... ................................................ .................................. ............................. ............ 62 8. ANİMASYON .................................. .................................................. ................................. .................................. .................................. .......................... ......... 64 8.1. Skeleton.............................................. .............................................................. ................................. .................................. ................................ ............... 64 8.2. Mesh ............................... ................................................ .................................. ................................. .................................. .................................. .................. 67 8.3. Animation ............................... ................................................ .................................. .................................. .................................. .......................... ......... 68 8.4. Graph ................................. .................................................. .................................. ................................. ................................. ................................ ............... 71 ii
8.5. Animasyonun Uygulanması ................................. .................................................. .................................. ............................. ............ 75 9. PARÇACIK EDİTÖRÜ (CASCADE) ............................... ................................................ .................................. ............................. ............ 76 .................................................. ....................... ...... 82 9.1. Partıcle System’i Bileşen Olarak Eklemek .................................
10. KULLANICI ARAYÜZ EDİTÖRÜ (UMG) ................................ ................................................. .................................. ................... 85 10.1. Designer ............................... ................................................ .................................. .................................. .................................. .......................... ......... 86 10.2. Graph .................................. ................................................... ................................. ................................. .................................. ............................. ............ 91
10.3. Wıdget Blueprint’i Ekrana Yerleştirmek ................................ ................................................. .......................... ......... 93 11. SES ................................. .................................................. ................................. ................................. .................................. .................................. ....................... ...... 94 12. MATINEE.............................................. ............................................................... ................................. .................................. .................................. .................. 97
13. AÇIK DÜNYA ARAÇLARI ................................ ................................................. .................................. .................................. ..................... .... 104 14. PAPER2D .................................. ................................................... ................................. ................................. .................................. ........................... .......... 107 15. NETWORK ................................. .................................................. ................................. ................................. .................................. ........................... .......... 111 16. YAPAY ZEKA .......................... ........................................... ................................. ................................. .................................. .............................. ............. 116
•
Game engine = Oyun motoru iii
•
Script = Betik dil
•
Scene graph = Sahne çizgesi
•
User interface = Kullanıcı arayüzü
•
Asset = Oyun malzemesi, malzeme
•
Colllision detection = Çarpışma saptaması
•
Syntax = Sözdizimi
•
Version = Sürüm
•
Actor (UE4’te levela yerleştirilebilecek olan nesne) = Nesne
•
Mode = Biçim
•
Move = Taşıma
•
Rotate = Döndürme
•
Scale = Ölçekleme
•
Location = Konum
•
Rotation = Yön
•
Scale = Ölçek
•
Component = Bileşen
•
Framework = Kütüphane
•
Transition = Geçiş
•
State = Durum
iv
Oyun motoru, oyun geliştirmeyi sağlayan bir yazılım yazılı m kütüphanesidir. Oyun motorunun temel olarak sağladığı işlevler şunlardır:
Render motoru
Fizik motoru ya da Çarpışma saptaması(Collision detection)
Ses
Betik dil desteği
Animasyon
Yapay zeka
Ağ desteği
Bellek yönetimi
Streaming
Threading
Yerelleştirme desteği
Sahne çizgesi(Scene graph)
Render motoru 2 boyutlu ya da 3 boyutlu nesnelerin ekrana çizilmesini sağlar.
İşte tüm bu işlevlerin tekrar tekrar oluşturulmaması için oyun motorları yazılmıştır. Oyun motorları bu işlevleri sunarak geliştiriciyi büyük bir iş yükünden kurtarır ve daha az kod yazılması ile proje yönetimi kolaylaşır. Sunulan kullanıcı arayüzleri ile oyun
yapımını kolaylaştırır. Bu şekilde oyun geliştiricilerin sadece yapacak oyunlara odaklanması amaçlanır. Bazı oyun motorları:
Unreal Engine 4
Source Engine
Unity 3D
CryEngine V
RAGE
Frostbite Engine 1
Unreal Tournament oyunundan bir görsel
Unreal Engine 4, ücretsiz ve açık kaynaklıdır. Açık kaynaklı olması, programlama yaparken kullanılan sınıfların incelenip hızlı bir şekilde öğrenmeyi ve olası hataların çözümünü kolaylaştırır.
Belgelendirme desteği oldukça iyidir.
Sorunumuz olduğunda gerek resmi forumda(https://forums.unrea forumda(https://forums.unrealengine.com) lengine.com) ya da soru sorma sitelerinde (https://answers.unrealengine.com) sorunumuza çözüm bulma olanağımız bulunmaktadır.
Sürekli güncellenmektedir.
Kendine özel marketi vardır. Bu markette oyun malzemeleri(ses, material, model vs.) ve editör için çeşitli eklentiler vardır. Eğer oyun fikrimiz yok ise ya da gerekli ekibe sahip değil isek markete koyacağımız ürünlerle para kazanma şansımız vardır.
Eğer programlama yapmak istemiyorsak Blueprint olarak adlandırılan görsel programlama dilini kullanarak oyun geliştirme şansımız vardır.
Oyunumuz kolayca pek çok platforma çıkarma şansımız vardır. Şuan desteklenen platformlar: Windows, Linux, Mac OS X, Android, iOS, Xbox, PS, HTML5, VR
Oyun motorunu üreten Epic Games firmasının ve dünya çapındaki oyun firmalarının kullandığı bir oyun motorunu kullanma şansımız vardır. 2
Son derece gerçekçi render kalitesine sahiptir.
Oyun motorunun belirli bir platforma yayınlanmasında para talep edilmesi gibi
kısıtlamalar yoktur.
Resmi olarak çok sayıda kaliteli oyun malzemesi ve örnek proje desteği vardır. Örnek olarak Infinity Blade adlı oyunun tüm malzemeleri projelerde ücretsiz olarak kullanıma açılmıştır.
Ücretsiz oyun malzemeleri ve örnek projeler
3
Oyun motoru ile birlikte gelen “StarterContent” kullanılarak oluşturulmuş örnek bir Level
4
Unreal Engine 1
İlk Unreal Engine, 1998 yılında Epic Games tarafından dönemin popüler oyunu Quake 2’ye karşı Unreal oyunu için kullanılmak üzere geliştirilmiştir. Render, çarpışma saptama, yapay zeka, ağ desteği, betik dil desteği ve dosya yönetim sistemi ile birlikte
oluşturulmuştur. Modüler mimari yapısı ve betik dil desteği(UnrealScript) ile oldukça popüler olmuştur. Unreal Tournament oyunu ile iyi olmayan ağ desteği geliştirilmiştir.
UnrealScript adlı betik dili Epic Games tarafından özel olarak Unreal Engine için oluşturulmuştur. Sözdizimi olarak C++, Java gibi dillere benzemektedir.
5
Unreal Engine 2 Unreal Engine 2, 2002 yılında America’s Army oyunu ile çıkmıştır. Çekirdek ve render
motoru sıfırdan yeniden yazılmıştır. Karma adlı fizik motoru eklenmiştir. 2.5 sürümü ile araç fiziği, parçacık düzenleyecisi, 64 bit desteği eklenmiştir. Mevcut konsollara destek eklenmiştir.
6
Unreal Engine 3
Unreal Engine 3 ile oyun motoru teknolojik gelişmeleri takip ederek gelişimini sürdürmüştür. Oyun dünyasında en çok kullanılan oyun motoru olmayı başarmıştır. Unreal Development Kit adı verilen mevcut oyun motorunun kısıtlı bir sürümünü ücretsiz olarak kullanıma açmıştır. UDK ile sadece oyun modlamak değil, oyun yapmakta mümkündü. Fakat yayınlanan oyunların kar oranı 50.000$‘ı geçerse elde edilen karın %25’i Epic Games’e verilmek zorundaydı.
7
Unreal Engine 4 Unreal Engine 4, 19 Mart 2014 tarihinde “Game Developers Conference”’ta
duyurulmuştur. Açık kaynaklı olduğu duyurulmuştur ve yeni bir ödeme şekli sunmuştur. Bu ödeme şekline göre aylık 19$ ödeyerek oyun motoruna sahip olunabi liyordu. Elde edilecek karın %5’i Epic Games’e ödenmesi gerekliydi. Aylık aboneliği iptal ettiğimizde bile oyun motorunu kullanma hakkına sahiptik. 2 Mart 2015 tarihinde ise oyun motoru ücretsiz olarak kullanıma açılmıştır. Oyun motorunun geliştirilmesi sürecinde arayüz için MFC, wxWidgets, Windows Forms ve WPF gibi 3.parti kütüphaneler kullanılmıştır. Bu kütüphanelerin istekleri
karşılayamadığı için Epic Games Slate adlı kendi arayüz kütüphanesini oluşturmuştur. Bu kütüphane editör için kullanıldığı gibi oyun içi arayüz içinde kullanılmaktadır. İlk oyun motoru ile oluşturulan UnrealScript adlı betik dili kaldırılmıştır. Bunun yerine Blueprint adlı görsel dil gelmiştir. Programcılar için ise C++ kütüphanesinde iyileştirme yapılmıştır.
8
Unreal Engine 1, 2, 3 ‘ün Render olarak karşılaştırılması
9
Öncelikle Unreal Engine 4’ü bilgisayarımıza indirmek için https://www.unrealengine.com/ adresine gidip üye olmamız gereklidir.
C++ derlemek için gerekli olan Visual Studio’yu aşağıdaki adresten indirelim. Eğer C++
ile çalışılmayacaksa Visual Studio’yu kurmaya gerek yoktur. 4.10 sürümü öncesi için Visual Studio 2013, sonrası için ise Visual Studio 2015’in indirilmesi gerekmektedir. VS 2015: https://www.visualstudio.com/products/visual-studio-community-vs VS 2013 : https://www.visualstudio.com/en-us/news/vs2013-community-vs.aspx
Şimdi https://www.unrealengine.com/ adresinde Get Unreal düğmesine tıklayarak Windows için olan Epic Games Launcher’ ı bilgisayarımıza indirip yü klememiz gerekiyor. Yükledikten sonra Epic Games Launcher adlı programı çalıştırdığımızda Unreal Engine Unreal Engine sekmesine sekmesine girip Install Engine düğmesine tıklanır. İnternetten 5 GB civarı
bir yükleme yapılacak. Yükleme yapıldıktan sonra Launch düğmesi ile Unreal En gine 4’ü başlatabiliriz.
21 Temmuz 2016 tarihi itibari ile Epic Games resmi olarak UE4 GNU/Linux sürümüne
destek vermemektedir. Yani şuan GNU/Linux sürümünü resmi siteden indirmek mümkün değildir. GNU/Linux dağıtımı yüklü bir bilgisayara UE4’ü kurmak için projeyi indirip derlememiz gereklidir.
ÖNEMLİ NOT 1: Epic Games tarafında tavsiye edilen GNU/Linux dağıtımı Ubuntu 14.04.3 LTS’dir. ÖNEMLİ NOT 2: UE4’ü derleme ve yürütme için root kullanıcısını kullanmayınız. 1. https://github.com/ sitesine girip üyelik oluşturalım. 2. https://www.unrealengine.com/dashboard/settings
sayfasında
Profile
sekmesinde “GitHub Account Name” alanına GitHub kullanıcı ismimizi girelim. 3. https://github.com/ adresinde “EpicGames” organizasyonuna katılmak için istek
geldiğini göreceğiz. Bu isteği kabul edelim.
10
4. https://github.com/EpicGames adresinde özel olan Unreal Engine projesini
göreceğiz. Artık kaynak kodlara erişmiş bulunmaktayız. 5. İşletim sistemine sudo apt-get install git komutu ile Git’i kuralım. sudo apt-get install build-essential mono-gmcs mono-xbuild mono-dmcs libmono-corlib4.0-cil libmono-system-data-datasetextensions4.0-cil libmono-system-web-extensions4.0-cil libmono-system-management4.0cil libmono-system-xml-linq4.0-cil cmake dos2unix clang xdg-userdirs
Kodu ile derlemek için gerekli uygulamaları indirelim. 6. UE4’ün yüklenmesini istediğimiz dizini terminalden açarak şu kodu girelim: git clone -b 4.9 https://github.com/EpicGames/UnrealEngine.git
Bu komut Unreal Engine’in kaynak kodunu bilgisayarımıza indirecektir. cd UnrealEngine ./Setup.sh ./GenerateProjectFiles.sh
Bu komut proje için gerekli 3GB 3 GB civarında binary dosyalarını indirecektir. make UE4Editor UE4Game UnrealPak CrashReportClient ShaderCompileWorker UnrealLightmass make -j1 ShaderCompileWorker
Komutları ile projeyi derleriz. cd Engine/Binaries/Linux ./UE4Editor
Komutu ile artık Unreal Engine 4’ ü açabiliriz. Eğer Unreal Engine 4’ü açarken “Signal 11” hatası aldıysak LC_ALL=C ./UE4Editor
Komutu ile Unreal Engine 4’ü açabiliriz. Tabii ki resmi destek olmadığı için Epic Games Launcher yoktur. Bizi sadece Unreal Engine 4 karşılar.
11
Epic Games Launcher
Epic Games Launcher uygulamasını açtığımızda bizi üstteki şekil şe kil karşılar. Şimdi t ek tek soldaki sekmelerin ne anlama geldiğini açıklayayım:
Bu bölümde blog yazıları, öne çıkarılan projeler, haberler ve topluluk için gerekli sitelere(AnswerHub, forum, wiki, roadmap, blog) kısayollar bulunur.
Bu bölümde UE4’ü öğrenmeye başlamak için belgelendirme sayfasına kısayollar, indirmeye hazır çok sayıda örnek proje bulunur.
Bu bölümde ücretli-ücretsiz oyun malzemeleri satılmaktadır. Bu malzemeler oyun motorunu öğrenmek için ya da yapılan projeyi kısa bir süre içinde bitirmek için kullanılır.
Burada dikkatimizi çekmesi gereken birden fazla UE4 sürümün olabildiğidir. Eğer UE4 için yeni bir güncelleme gelirse yeni güncelleme gün celleme mevcut UE4’ün üzerine yazılmaz. Yani 12
aynı anda UE4’ün farklı sürümlerini kullanabiliriz. Örneğin, 4.8.3 ile oluşturulmuş bir proje, 4.9.2 ile açılmak istenirse otomatik bir dönüştürme uygulanır. Ayrıca üst tarafta kendi oluşturduğumuz projelerimiz ve alt tarafta marketten indirilmiş projeler ya da oyun malzemeleri bulunur. Oyun malzemelerini bu bölümden projeye ekleyebiliriz.
Unreal Engine 4 başlangıç sayfası Library sekmesinde istediğimiz UE4 sürümünü seçip açalım. Projects Projects sekmesinde Project sekmesinden yeni proje oluşturacağız. Burada mevcut projelerimiz vardır. New Project sekmes
çeşitli şablon projeler vardır. Oyunumuzu bu şablonlardan birinin üzerine inşa edebileceğimiz gibi bu şablonları onların nasıl yapıldığını inceleyip öğrenme amaçlı olarak ta kullanabiliriz. Fakat temel olarak kullanımı, oyun motorunun çeşitli özelliklerini öğrenirken sıfırdan yeni proje oluşturmaktansa bu mevcut şablonları kullanarak o anki öğrenilen bilgiye odaklanmaktır. En üstte Blueprint ve C++ sekmelerini görürüz. Bu oluşturulan projede yer alan Y ani Blueprint ile bir nesnelerin Blueprint ya da C++ ile yazılmış olması anlamına gelir. Yani proje açtığımızda istersek C++ kodu da ekleyebiliriz. Herhangi bir kısıtlama yoktur. 13
Orta bölümde projenin temel olarak odaklanacağı donanımı Desktop/Console Desktop/Console ya da Mobil/Tablet olarak Mobil/Tablet olarak belirleyebiliriz.
Görüntü kalitesini Maximum Quality ya da Scalable 3D or 2D 2D olarak belirleyebiliriz. Scalable 3D or 2D seçeneği çeşitli performans gerektiren görüntü ayarlarını kapatır. No Starter Content Content ya da With Starter Content seçeneği ile projeye örnek oyun malzemelerinin eklenip eklenmeyeceğini belirleriz. Öğrenme aşamasında genelde bu
malzemeler kullanılır. En alt bölümde ise projenin kaydedileceği dizin ve projenin ismi yer alır. Create Project düğmesi ile seçtiğimiz ayarlar ile yeni projemizi oluşturabiliriz.
First Person şablonu ile oluşturulmuş bir proje
14
Unreal Engine 4 ana editör
Editör pek çok panelden oluşmuştur. Bu paneller hareket ettirilebilir, kapatılabilir, büyüyüp küçültülebilir. Bir diğer panelin ad kısmının oraya sürüklendiğinde sekme oluşturur. Kapatılan panellere 7. bölümdeki Window menüsünden ulaşılabilir.
Bu bölüm editörün en temel kısmıdır. Bu bölümde nesneler yerleştirilir, düzenlenir. Farenin sağ tuşu basılı tutulup W,A,S,D tuşları kullanıldığında Level içinde hareket edebiliriz.
Viewport üstünde yeralan düğmeler
Sağ üstte yer alan menülerde kamera hızı ayarlaması, taşıma, döndürme, ölçekleme modları, grid seçeneği vardır. Grid seçeneği örneğin bir nesneyi hareket ettirdiğimizde onun bir birimi temel alarak hareket etmesidir. Yani grid değerini 10 yaptığımzda nesnemiz 0 konumundan 1 konumuna hareket etmektense 10, 20, 30 konumlarına hareket eder.
Sol üstte yer alan menülerde kamera açısı, bakış biçimi, Level’da nelerin gösterilipgösterilmeyeceği ve daha birçok seçenek bulunur.
15
Modes panelindeki sekmeler
Editör için çeşitli araçlar sunar.
Burada Level’a yerleştirebileceğimiz tüm sınıflar bulunur. Arama kısmında yerleştirmek
istediğimiz sınıfı hızlı bir şekilde bulabiliriz.
Belli nesneleri oyun içinde boyamamızı sağlar.
Açık dünya oluşturmak için gerekli araçları sunar. Bu araçlarla Level’da çok büyük seviyede arazi oluşturabiliriz. Bu araziyi araçlarla yontarak gerçekçi dağlar, ovalar gibi yeryüzü şekilleri oluşturabiliriz.
Yeryüzüne çim, ağaç, çiçek gibi nesnelerin eklenmesini otomatikleştirir. Bu araç sayesine büyük bir alana rastgele boyutlu, rastgele yönlere bakan nesneler yerleştirebiliriz.
2 numaralı Modes bölümündeki BSP kısmında eklediğimiz şekilleri basit bir biçimde düzenlemeyi sağlar.
Tüm oyun malzemelerinin tutulduğu alandır. Bu kısma oyun malzemelerini sürükleyip bırakarak dışardan oyuna malzeme eklemiş oluruz. Dizin oluşturma, ad değiştirme, taşıma gibi işlemleri gerçekleştirebiliriz. 16
Seçilmiş nesnenin bilgileri, değiştirilebilir özelikleri bulunur. Örneğin bir nesnenin bileşenleri (component), konum, yön, ölçeği, oyunda görünüp-görünemeyeceği, Static Mesh’i(oyunda yer alan model), fizik kurallarını uygulayıp-uygulayamayacağı gibi özelliklerinin bakılıp değiştirilebildiği bölümdür.
Details paneli
Level’da yer alan tüm nesnelerin hiyerarşik bir biçimde listelendiği bölümdür. Burada
bir nesneyi seçip Details bölümünden özelliklerini değiştirebiliriz. Level bulmakta zorlandığımız nesneyi arayarak bulup F tuşuna basarak Viewport kamerasında o nesneyi göstermesinin sağlayabiliriz.
17
World Outliner
Yaygın olarak kullanılan araçlara ulaşılır. Ayarlar, oyunu oynama, oyunu editörden ayrı biçimde oynanacak şekilde inşa etmek gibi seçenekler burada yer alır.
Menü çubuğu pek çok uygulamada karşılaştığımız gibi genel araçlara ulaştığımız bölümdür.
18
Blueprint UE4’te bulunan görsel betik dilidir. Blueprint ile C++ ile oluşturulmuş nesnelere fazladan işlevsellik ekleyebildiğimiz gibi bu dili kullanarak sıfırdan Blueprint sınıfları ile oyun geliştirebiliriz. Görsel bir programlama dili olması oyun için çalışan sanatçıların, tasarımcıların oyun için programlama yapmasını kolaylaştırır. Bu dil bir makine koduna dönüştürülmektense bir çeşit sanal makinede çalıştırılıp sonradan makine koduna dönüştürülür. Bu da performans kaybına yol açmaktadır. Blueprint kodu, C++ kodunda 10-15 kat daha yavaş çalışır. Bundan dolayı
yayınlanmasını planlanan bir oyunu Blueprint ile yapmak mantıklı değildir. Genel olarak çalışma prensibi, oyun için tasarlanmış olan sınıfları C++ ile oluşturmaktır. Örneğin ateş edip kurşun fırlatabilen, Level’da yerden alınabilen bir silah sınıfı. Sınıfı özelleştiren unsurların Blueprint’lerde kodlanması ve belirlenmesi gereklidir. Örneğin ateşin ne kadar hasar vereceği, ne sıklıkla ateş edilebileceği, ateşin canlı olmayan bir nesneye çarptığından çıkaracağı kıvılcım vs. Blueprint’te “Tick” fonksiyonunu (Her framede çalıştırılan fonksiyon) kullanırken dikkatli olunmalıdır. “Tick” fonksiyonu Blueprint’te kullanılmamalı ya da çok az bir kod yazılmalıdır. Blueprint’lerin çeşitli türleri vardır:
Görsel betik dili kullanılan bir sınıf yapısıdır. Genellikle Blueprint olarak kısaltılırlar. Yeni bir Blueprint sınıfı oluşturmak için: Content Browser
→
Add New
→
Blueprint Class
19
→
T üretilecek üretilecek olan sınıf
Yeni Blueprint sınıfı oluşturmak
Bir diğer seçenek olarak Content Browser ’da ’da boş bir alanda farenin sağ tuşuna tıklayarak ta yeni bir Blueprint sınıfı oluşturabiliriz. Açılan pencereden türetilecek olan sınıfı seçmemiz gereklidir.
Blueprint sınıfı için türetilecek olan sınıfın seçimi
Bu seçenekler arasında Actor sınıfını seçiyoruz. Actor sınıfı bir Level’a konulabilecek en temel sınıftır. Oyun için kullanılan Şekil 17’deki sınıfların açıklaması bir sonraki konuda anlatılacaktır.
20
Actor sınıfından türetilmiş bir Blueprint sınıfı
Oluşan Blueprint sınıfımız Content Browser ‘da ‘da gözükür. İstersek yeni dizin oluşturarak bu Blueprint sınıfını bu dizin içine sürükleyebiliriz. Content Browser ‘da ‘da bulunan malzemelerin adını, farenin sağ tuşuna basıp Rename seçeneğini seçerek ya da F2
tuşuna basıp değiştirebiliriz. Yeniden adlandırılmış olan Blueprint sınıfını açalım.
Blueprint sınıfı arayüzü
Component (Bileşen), oyun içi sınıflarına eklenebilen tekrar kullanılabilir işlevlerdir.
Örnek olarak bir Scene Component bir nesnenin Transform’unu yani, onun konumu, yönü, ölçeğini tutar. Static Mesh Component ise nesnenin Level’daki görüntüsüdür diyebiliriz. Daha ayrıntılı açıklama bir sonraki konuda yapılacaktır. y apılacaktır. Components bölgesi Blueprint sınıfına bileşenlerin eklendiği alandır. alandı r. Burada bileşenleri
ekleyip onları hiyerarşik bir yapıda bulundururuz. Yeni bir bileşen eklemek için Add 21
Component düğmesine basarak eklemek istediğimiz bileşeni seçmemiz yeterlidir.
İstersek kendimize özel bileşeni Blueprint ya da C++ kullanarak oluşturabiliriz.
FirstPersonCharacter Blueprint sınıfının bileşenleri
Add Component d Component düğmesine tıklayarak yeni bir bileşen eklemek
Bu Blueprint’in sahip olduğu Graph’lar, fonksiyonlar, makrolar, değişkenler, Event Dispatcher’lar burada bulunur. Örnek olarak bir sınıfa “Speed” adında virgüllü sayılı bir değişken eklemek istersek. Add New düğmesine tıklayarak Variable seçeneğini seçmemiz gerekir.
22
Add New düğmesi ile yeni bir değişken eklenmesi
Yeni eklediğimiz değişkenin tipi, ismi, bu sınıf dışındaki bir sınıf tarafından düzenlenip düzenlenemeyeceği, kategorisi, varsayılan değeri gibi değerler sağ taraftaki Details bölümünden düzenlenir.
Yeni eklenmiş bir değişken
Değişkenimizin bir dizi olmasını istiyorsak, Variable Type kısmının en sağında yer alan dokuz kareden oluşan resme tıklamamız tı klamamız yeterlidir.
Dizi oluşturmak
Bu pencereler arasında geçiş yapabiliriz.
23
Blueprint sınıfının Level’da nasıl gözükeceğiniz görme olanağını bulduğumuz penceredir. Bu pencere editörün Viewport penceresine benzer. Aynı tuşlar yardımı ile bakış açımızı değiştirebiliriz.
Bir kayanın Viewport’taki görüntüsü
Oyuna başlamadan önce gerçekleşmesi gereken işlemleri yazıldığı alandır. Programlama dillerindeki yapıcı olarak düşünebiliriz. Bileşenlerin eklenmesi için kullanılabilir. Eğer bir Blueprint sınıfına bir değişkene bağımlı olarak Static Mesh Component eklemek istersek burada kodlamamız gereklidir. Kullanımı EventGraph ile EventGraph ile aynıdır.
24
Boş bir ConstructionScript
Burada Node’ları birbirine bağlayıp görsel olarak programlama yapacağız. C++‘taki
fonksiyonlar burada Event olarak adlandırılırlar. Yaygın olarak kullanılan Event’lar: : Oyun başlayınca gerçekleşmesi istenen işlemlerin programlandığı
yerdir.
: Her framede gerçekleşmesi istenen işlemlerin programlandığı yerdir. Bir önceki frame ile arada geçen zamanı belirten “Delta Seconds” değeri vardır. Bu fonksiyon her bilgisayarda farklı hızda çalıştığından dolayı, aynı sürede gerçekleşmesi istenen işlemler için “Delta Seconds” değeri kullanılır. : Nesne oyundan ayrıldığında gerçekleşen işlemlerin programlandığı
yerdir.
: Nesnenin tüm bileşenleri dâhil Level’da bulunan diğer
nesnelerin herhangi bir parçası ile fiziksel olarak üst -üste gelme durumunda gerçekleşecek olan işlemlerdir. :
Nesnenin
oyunda
fare
ile
tıklanılması
durumunda
gerçekleşecek olan işlemlerdir. Üstte yer alan Event’ler Actor için geçerli olan Event’lerdir. Bileşenlerinde kendine özel bazı Event’leri vardır.
25
Boş Bir EventGraph EventGraph’ta gözüken dikdörtgen şekiller Node olarak adlandırılır. Yeni Node eklemek için tek yapmamız gereken EventGraph‘ta boş bir alanda farenin
sağ tuşuna tıklayarak eklemek istediğimiz Node’u seçmektir. Eğer aradığımız Node’u bulamadıysak Context Sensitive seçeneğini devre dışı bırakmamız gereklidir.
EventGraph’a Node eklemek
26
Node’ları birbirine bağlamak
İki Node’un kulakçıklarını farenin sol tuşu ile bir birine bağlarız. Üstteki örnekteki nesne Level’a yerleştirilirse her framede ekrana “Hello” yazısını yazacaktır.
Ekrana “Hello” yazan bir kaya
Aşağıda örnek bir Blueprint verilmiştir. Bu Blueprint “ Hit” Event’i sayesinde bir fiziksel darbe geldiğinde mevcut Particle System Component‘ini etkin hale getirir ve LightComponent‘ini görünmez hale getirir. 1.5 saniye sonra da Particle System Component‘ini devre dışı bırakır. Bileşenlerde bir tür değişkendir, event’lar uyumlu ise onlara bağlanabilirler.
27
Örnek bir Blueprint
Programla yaparken nasıl derlememiz gerekiyorsa Blueprintleri de derlememiz gereklidir.
Kaydetmeyi sağlar.
’da mevcut Blueprintin bulunduğu konumu açar. Content Browser ’da
Mevcut Blueprintte yer alan Node’lar arasında arama yapmak için kullanılır.
Blueprintin açıklaması, kategorisi, türetilmiş sınıfı, blueprint interface’i gibi ayarların yapılabildiği bölümdür.
28
Sınıfın varsayılan değişkenlerinin belirlendiği bölümdür. Nesnenin oyunda görünüpgörünmeyeceği, girdi alıp-alamayacağı ya da “Tick” Event’ine sahip olupolamayacağının belirlendiği alandır. “Tick” Event’i kullanılmayacaksa buradan devre dışı bırakmak performans kazancı sağlar.
Oyunu test edilebilir bir halde açar. Oyun oynanırken editörde değişiklikler yapa biliriz.
Oyunu editörün Viewport’unda açar. Blueprintteki mevcut akışı izleyebiliriz. Mevcut işlemler turuncu çizgiler ile belirtilir. Hata ile karşılaştığında turuncu çizgileri takip edip mevcut hatayı bulabiliriz. Branch Node’u Boolean değerlere göre akışı belirleyen Node’dur. Aşağıdaki örnekte Branch Branch Node’unun Condition‘ı False olduğu için ve sadece True seçeneği ile akışı
devam ettirdiği için programın akışı Branch Node’unda tıkanır. Bunu da turuncu çizgiden anlayabiliriz.
Play’e tıklayınca oyunun kod akışı
Class Settings, Settings, Class Defaults ya da sol üstteki bileşenlerin özelliklerinin gösterilip,
değiştirildiği bölgedir.
Menü çubuğu pek çok uygulamada karşılaştığımız gibi genel araçlara ulaştığımız bölümdür.
29
Her Level’da bir adet bulunur. Otomatik olarak oluşturulur. Sonradan eklenemezler.
Level’ın tamamını ilgilendiren olaylar burada programlanır. Açmak A çmak için: Toolbar
Blueprints
→
Open Level Blueprint
→
Level Blueprint’in açılması
Level Blueprint arayüzü
30
Level Blueprintin Level’da bulunan nesneyi seçerek referans alabilmesi gibi bir özelliği
vardır. Bunu gerçekleştirebilmek için referans alınması istenen nesneyi farenin sol tuşu ile Viewport‘ ta seçeriz.
Viewport’ta seçilen bir nesne, nesnenin sarı kenarları nesnenin seçildiğini belirtir
Level Blueprint’te bir nesneye referans göstermek Level Blueprint’i açarak EventGraph’ta farenin sağ tuşuna basarak açılan menüden Create a Reference to …
seçeneğine tıklayarak nesnenin bir referansını eklemiş oluruz.
Bu referansı kullanarak nesneye erişim elde etmiş oluruz.
31
Level Blueprint’te bir nesneye referans gösteren Node Tabii ki nesneleri sadece Viewport‘ta seçmek zorunda değiliz, dilersek World
’dan da seçim yapabiliriz. Outliner ’dan
32
Blueprint ya da C++ ile oyuna yeni sınıflar eklediğimizde bu sınıfların bir sınıftan türetilmesi gereklidir. Yani aslında tamamen Blueprint kullanarak programlama yapmıyoruz, oluşturduğumuz Blueprint’lerin temelinde de Actor, Pawn, Character gibi C++ ile yazılmış sınıflar bulunmaktadır. Bu sınıfların “header” dosyalarını buradan ulaşabiliriz: ...\Epic Games\4.9\Engine\Source\Runtime\Engine\Classes
Bu sınıfların kaynak dosyalarına burada ulaşabiliriz: ...\Epic Games\4.9\Engine\Source\Runtime\Engine\Private
4.9 ulaşmak istediğimiz UE4 sürümüdür. Sınıfların adlandırılmasında sınıf türüne göre çeşitli ön ekler getirilmiştir. UObject”’ten türetilmiş sınıflar. Örnek: “UTexture” AActor”’dan türetilmiş sınıflar. Örnek: “APawn”, “AGameMode”
Diğer sınıflar ve structlar için. Örnek: “FName”, “FVector” Template kullanılan sınıflar. sınıflar. Örnek: Örnek: “TArray”, “TMap”, “TQueue” Interface kullanılan sınıflar. Örnek: “ITransaction” Enum türleri, Örnek: “ESelectionMode” Boolean değişkenler, i.e. “bEnabled” Kodlama standartı olarak tüm sınıfların, değişkenlerin, fonksiyonların adları büyük harfle başlar ve sözcüklerin ilk harfi hep büyüktür. void AOrnekActor::Tick( AOrnekActor::Tick( float DeltaTime DeltaTime ) ) { Super::Tick( Super ::Tick( DeltaTime DeltaTime ); ); FRotator NewRot FRotator NewRot = GetActorRotation(); NewRot.Yaw += RotationRate * DeltaTime DeltaTime; ; SetActorRotation(NewRot); }
33
Yeni C++ sınıfı oluşturmak için: Add New
New C++ Class
→
Yeni C++ sınıfı oluşturma
Burada yeni sınıfımızı türeteceğimiz sınıfı seçmemiz gereklidir. En çok kullanılan sınıflar gösterilmektedir. Eğer aradığımız sınıf bu pencereden yok ise Show All Classes seçeneğine tıklayarak sınıfı arayacağımız arayüzü açarız.
Ebeveyn sınıf seçimi 34
Örnek olarak Actor sınıfını seçelim.
Ebeveyn sınıfı arama; burada sınıflar hiyerarşik bir biçimde gözükür
Sınıf adlandırma penceresi Sınıfımızı “OrnekActor” olarak adlandırdık ve oluşturma yerini “OrnekSiniflar” dizini olarak belirledik. Create Class düğmesine tıklayınca, yeni eklenen sınıfımız derlenmeye
başlar ve derlendikten sonra otomatik olarak Visual Studio açılır.
35
Yeni sınıf eklendikten sonra Visual Studio Visual Studio otomatik olarak yeni eklenen sınıfı gösterir. “OrnekActor.cpp” ve
“OrnekActor.h “ dosyaları şekilde gözükmektedir. Soldaki Solution Explorer diğer sınıflara erişim için kullanılır. Altta bulunan Output derleme sonucunu bize gösterir.
C++’da sınıfın değişken ve fonksiyon prototipleri sınıfın başlık(header) dosyasına yazılır. O yüzden “OrnekActor.h”’i açalım ve şu kodları yazalım. OrnekActor.h // Fill out your copyright notice in the Description page of Project Settings. #pragma once #include "GameFramework/Actor.h" #include "GameFramework/Actor.h" #include "OrnekActor.generated.h" #include "OrnekActor.generated.h" UCLASS() class EXAMPLEPROJECT_API class EXAMPLEPROJECT_API AOrnekActor AOrnekActor : : public AActor { GENERATED_BODY() public: // VARIABLES UPROPERTY(EditAnywhere, UPROPERTY (EditAnywhere, BlueprintReadWrite, Category = "Properties") "Properties" ) float RotationRate; float RotationRate;
36
UPROPERTY(VisibleDefaultsOnly, BlueprintReadOnly) UPROPERTY(VisibleDefaultsOnly, UStaticMeshComponent* Mesh; // METHODS // Sets default values for this Actor's properties AOrnekActor(); // Called when the game starts or when spawned virtual void BeginPlay() override; // Called every frame virtual void void Tick( Tick( float float DeltaSeconds DeltaSeconds ) override override; ; };
Sarı arkaplan ile belirtilen kısmı biz yazdık. Diğer bölümler zaten otomatik olarak oluşturulmuştu. “Cpp” dosyasında ise şu kodu yazalım: OrnekActor.cpp // Fill out your copyright notice in the Description page of Project Settings. #include "ExampleProject.h" #include "ExampleProject.h" #include "OrnekActor.h" #include "OrnekActor.h" // Sets default values AOrnekActor::AOrnekActor() AOrnekActor ::AOrnekActor() { // Set this Actor to call Tick() every frame. You can turn this off to improve performance if you don't need it. PrimaryActorTick.bCanEverTick = true true; ; RotationRate = 180.f; Mesh = CreateDefaultSubobject
( >(TEXT TEXT( ("Mesh" "Mesh")); )); RootComponent = Mesh; } // Called when the game starts or when spawned void AOrnekActor AOrnekActor::BeginPlay() ::BeginPlay() { Super::BeginPlay(); Super ::BeginPlay(); } // Called every frame void AOrnekActor AOrnekActor::Tick( ::Tick( float DeltaTime DeltaTime ) ) { Super::Tick( Super ::Tick( DeltaTime DeltaTime ); ); FRotator NewRot = GetActorRotation(); FRotator NewRot NewRot.Yaw += RotationRate * DeltaTime DeltaTime; ; SetActorRotation(NewRot); }
37
Dosyaları kaydedip projeyi Visual Studio’ dan derleyelim. Bunun için Solution Explorer ’da, proje ismine farenin sağ tuşu ile tıklayıp Build seçeneğini seçelim. Dilersek projeyi Editör’deki Toolbar ’da Compile düğmesi ile de derleyebiliriz.
Projenin Visual Studio’dan derlenmesi
Editörde projeyi derlemek Derleme aşamasından sonra hata ile karşılaşırsak, Visual Studio’ da Output penceresinde hatamızın neden kaynaklandığını anlayabiliriz.
Output penceresi Output penceresi
Projemizi Unreal Engine editöründen derlediysek yine hata olduğunda bizi bilgilendirecektir. Önceki derleme durumlarına bakmak istersek: Menu Bar
Window
→
Developer Tools
→
Message Log
→
38
Compiler Log
→
Compiler Log
Sınıfımızdan oluşacak nesne sadece Z ekseni eksen i etrafında dönecek. Kodlarda Static Mesh Component’i belirlemedik, çünkü Static Mesh’in değişebileceğini ve bundan dolayı
Blueprint’te belirtmenin daha uygun olduğunu düşündük. Kodlarda dikkat etmemiz gereken nokta yoğun bir şekilde makro kullanıldığıdır. UE4 üreticileri programcıların rahat kod yazabilmesi için bu şekilde bir çözüm bulmuşlardır. Değişkenler tanımlamadan önce yazılan “UPROPERTY()” makrosu değişkenin editörde görülebilmesini sağlar. Değişkenin Blueprint’te gözükmesi ya da değiştirilebilmesi ayarlanır. Sınıfımız
derlendiğine
Content Browser
göre,
C++ Classes
→
bu
sınıftan
ExampleProject
→
bir
Blueprint
oluşturabiliriz.
OrnekSiniflar
→
Dizinine gidip, “OrnekActor” sınıfına farenin sağ tuşu ile tıklayıp Create Blueprint class based on OrnekActor seçeneğini seçeriz. Dilersek Add New
Blueprint Class seçeneği
→
ile “OrnekActor” sınıfını arayıp seçerek te “OrnekActor”’den türetilmiş bir Blueprint sınıfı
oluşturabilirdik.
39
C++ sınıfından Blueprint oluşturmak
Çıkan pencerede yeni Blueprint sınıfını adlandırıp, Blueprint sınıfının oluşturulacağı dizini seçmemiz gerekir. Bundan sonra Create Blueprint Class düğmesi ile Blueprint sınıfımızı oluştururuz.
Yeni oluşturulacak Blueprint sınıfının adlandırılması ve dizini belirlenmesi
Blueprint oluştuktan hemen sonra Blueprint’imiz açılır.
40
Blueprint’te C++ sınıfından miras gelen bileşen ve değişken Solda Mesh(Inherited ) ifadesi gördüğümüz bileşen bizim C++ kodu ile oluşturduğumuz Static Mesh Component ’tır.
Sağda “Rotation Rate” değişkenini görüyoruz. Kategorisini “Properties” olarak belirlemiştik. Dilersek mevcut “180” ifadesini değiştirebiliriz. Solda yer alan Mesh seçeneğine tıklayalım ve sağda açılacak olan Details penceresinden Static Mesh’ini “1M_Cube” yapalım. Viewport’ta mesh’in değiştiğini
görürüz.
41
Static Mesh’i belirlemek
Viewport
Blueprint editörünü kapayalım ve Content Browser ’daki “MyOrnekActor” Blueprint’ini Level’a sürükleyip bırakalım. Nesnenin konumunu belirleyip Toolbar ’dan Play tuşuna
basalım. Play tuşunun varsayılan ayarı mevcut editör penceresinde oynatmaktır, dilersek yanındaki ayar tuşu ile oyunu ayrı bir pencerede oynatabiliriz. Küpün Z ekseni etrafında sürekli döndüğünü göreceğiz.
Play düğmesi ile oyunu Viewport’ta test e tme
42
UE4’te programlama yaparken C++’ın temel değişken türleri kullanılmaz.(int, char, short, long,..). Bunun yerine şu değişken türleri kullanılır: int32, uint32, uint64, TCHAR, ANSICHAR .. Bu şekilde kullanmanın sebebi bir kodun tüm platformlarda aynı şekilde derlenmesi içindir.
“Core” modülünde bulunurlar.
X,Y,Z eksenlerine hizalı bir kutu oluşturur. Oyun motoru ve oyunda pek çok yerde kullanılırlar. Örneğin bir alanda rastgele oluşturulacak nesnelerin konumunu sınırlandırmak için kullanılır. Bir diğer örnek ise çarpışma saptamasında kullanımıdır. Runtime/Core/Public/Math/Box.h
3 boyutlu uzayda bir nesnenin konumudur. X,Y,Z adından 3 float değişkene sahiptir.
Sadece konum için değil, ölçek içinde kullanılır. Runtime/Core/Public/Math/Vector.h
Yönleri tutar. “ Pitch”, “Roll”, “Yaw” adlı 3 float değişkene sahiptir.
XYZ koordinatları
43
Y ekseni(sağa) etrafındaki dönüş. X ekseni(ileri) etrafındaki dönüş. Z ekseni(yukarı) etrafındaki dönüş. Değerler açı cinsindendir.
Renkleri tutmak için kullanılan bir yapıdır. “ R(Red)”, “G(Green)”, “B(Blue)”, “A(Alpha)” değişkenleri “uint8” türündedir. “A” rengin saydamlığını belirler. Runtime/Core/Public/Math/Color.h
İki değer alan bir şablon yapısıdır. “ FVector”, “float”, “FRotator”, “int32” gibi türler bu şablon için kullanılabilir. Bu şablon rastgele değer üreten fonksiyona parametre olarak kullanılabilir. Runtime/Core/Public/Math/Range.h
Dinamik olarak genişletilebilir bir stringtir.
“UObject”’te yoğun olarak kullanılır. Editördeki malzeme adları “ FName” kullanırlar. Oldukça az bir alan kaplarlar.
Oyunu yerelleştirme yani başka dillerde de kolayca oynanması için oluşturulmuş bir yapıdır. Oyun içi kullanıcı arayüzü için kullanılmaktadır. Runtime/Core/Public/Internationalization/Text.h
44
Şablon olarak oluşturulmuş UE4’e özel bir dizi yapısıdır. Neredeyse tüm UE4 sınıflarını tutabilir. Dikkat edilmesi gereken nokta nesnelerin kendisini değil, işaretçilerini diziye atmaktır. Örnek: TArray Actors;
Runtime/Core/Public/Containers/Array.h
Programlamada hash ya da sözlük olarak bilinen yapıdır. Anahtar -değer ilişkisine göre çalışır. Örnek: TMap FruitMap;
Runtime/Core/Public/Containers/Map.h
İlk giren son çıkar mantığını kullanan bir yapıdır. Örnek: TQueue > RecentScores;
Runtime/Core/Public/Containers/Queue.h
Küme yapısıdır. Bir eleman yalnızca bir adet bulunabilir. Diğer kümeler ile birleşim, fark, kesişim için fonksiyonları vardır. Örnek: TSet setOne;
Runtime/Core/Public/Containers/Set.h 45
UObjectBase ___UObjectBaseUtility ______UObject
Tüm sınıfların atasıdır. C++’da bulunmayan özellikler makrolar ile eklenmiştir. Runtime Reflection, çöp toplama ve otomatik Serialization en önemli özelliklerdir.
UObjectBase ___UObjectBaseUtility ______UObject _________UTexture ____________UTexture2D
Materyal editöründe yoğunlukla kullanılan, bir res imi UE4 editörüne bıraktığımızda oluşan yapıdır. Runtime/Engine/Classes/Engine/Texture2D.h
UObjectBase ___UObjectBaseUtility ______UObject _________UFont
Slate, UMG ve Canvas’ta kullanılan font nesnesidir. Font nesnesi “ TTF” uzantılı fontları tutar ve tuttuğu fontlardan istenilen adlı fontu kullanır. Runtime/Engine/Classes/Engine/Font.h
46
UObjectBase ___UObjectBaseUtility ______UObject _________UWorld
Bir oyunda tüm Level’larda bulunan tüm nesnelerin referanslarının tutulduğu sınıftır. Örneğin oyundaki PlayerController’a ulaşmak için kullanırız. Runtime/Engine/Classes/Engine/World.h
UObjectBase ___UObjectBaseUtility ______UObject _________UActorComponent
Bileşenlerin temel soyut sınıfıdır. Bileşenler herhangi bir Actor’e eklenebilen tekrar kullanılabilir işlevlerdir. Runtime/Engine/Classes/Components/ActorComponent.h
UObjectBase ___UObjectBaseUtility ______UObject _________USceneComponent
Konum, yön, ölçek gibi yapılara sahip bir bileşendir. Actor’lere varsayılan bileşen olarak eklenirler. Runtime/Engine/Classes/Components/SceneComponent.h
47
UObjectBase ___UObjectBaseUtility ______UObject _________USceneComponent ____________UPrimitiveComponent _______________UMeshComponent __________________UStaticMeshComponent
Actor’un görsel kısmı; modelleme programlarında oluşturulmuş ve UE4’e aktarılmış modelidir. Editörde Static Mesh’ler için bir editör bulunmaktadır. Bu editörde Static
Mesh için çarpışma ha cmi ekleyebiliriz. Bu hacim sayesinde UStaticMeshComponent ile çarpışma saptaması yapabiliriz. Runtime/Engine/Classes/Components/StaticMeshComponent.h
UObjectBase ___UObjectBaseUtility ______UObject _________USceneComponent ____________UPrimitiveComponent _______________UShapeComponent __________________UCapsuleComponent
Çarpışma saptaması için kullanılan bir bileşendir. Genelde insansı canlılar için kullanılır Kutu şeklinde benzeri: Küre şeklinde benzeri:
UObjectBase ___UObjectBaseUtility
48
______UObject _________USceneComponent ____________UPrimitiveComponent _______________UMeshComponent __________________USkinnedMeshComponent _____________________USkeletalMeshComponent
Üzerinde Skeleton bulunan yani animasyon için özelleştirilmiş hareket edebilir uzantıları
bulunan
bir
yapıdır.
Örneğin
“ACharacter”
sınıfında
USkeletalMeshComponent eklenmiş olarak gelmektedir. Runtime/Engine/Classes/Components/SkeletalMeshComponent.h
UObjectBase ___UObjectBaseUtility ______UObject _________UActorComponent ____________USceneComponent _______________UCameraComponent
Oyundaki görüntüyü ekranda getirmekle yükümlü olan bileşendir. Oyunda ana oyuncu olarak seçilmiş nesnenin UCameraComponent’inin gösterdiği görüntü ekrana yansır. Runtime/Engine/Classes/Camera/CameraComponent.h
UObjectBase ___UObjectBaseUtility ______UObject _________UActorComponent ____________USceneComponent _______________USpringArmComponent
49
Oyunda kamerayı tutmak ile sorumlu olan bileşendir. Eğer kameranın bulunduğu yerde bir nesne var ise nesnenin içinden geçmek yerine görüntüyü başka bir açıdan vermeye çalışır. Runtime/Engine/Classes/GameFramework/SpringArmComponent.h
UObjectBase ___UObjectBaseUtility ______UObject _________UActorComponent ____________USceneComponent _______________UPrimitiveComponent __________________UTextRenderComponent
Oyunda bir yazıyı gösterir. Runtime/Engine/Classes/Components/TextRenderComponent.h
UObjectBase ___UObjectBaseUtility ______UObject _________UActorComponent ____________USceneComponent _______________UPrimitiveComponent __________________UParticleSystemComponent
Runtime/Engine/Classes/Particles/ParticleSystemComponent.h
Parçacık çıkarır. Bu parçacıklar oyundaki Cascade adlı parçacık editöründe oluşturulur.
UObjectBase ___UObjectBaseUtility ______UObject
50
_________UActorComponent ____________USceneComponent _______________UAudioComponent
Ses dosyası çalar. Runtime/Engine/Classes/Components/AudioComponent.h
UObjectBase ___UObjectBaseUtility ______UObject _________AActor
Actor, bir Level’a yerleştirilebilecek en temel sınıftır. Level’da bulunan her nesne Actor
sınıfından türetilmiştir. İstenildiği kadar ActorComponent tutabilir. Runtime/Engine/Classes/GameFramework/Actor.h
UObjectBase ___UObjectBaseUtility ______UObject _________AActor ____________APawn
Kullanıcıdan veri girişi alabilen oyuncunun kontrol edebildiği nesnelerdir. Runtime/Engine/Classes/GameFramework/Pawn.h
UObjectBase ___UObjectBaseUtility ______UObject _________AActor
51
____________APawn _______________ACharacter
İnsansı canlılar için özelleştirilmiş bir sınıftır. Yürüyebilir, zıplayabilir, yüzebilir ve uçabilir. Skeletal Mesh Component, Capsule Component ve Character Movement Component yapıştırılmıştır. Runtime/Engine/Classes/GameFramework/Character.h
UObjectBase ___UObjectBaseUtility ______UObject _________AActor ____________AController _______________APlayerController
Oyuncu ile kontrol edilmek istenen nesne arasında bağ kuran sınıftır. Alınan verileri “Pawn” sınıfı kökenli sınıflara iletir. Runtime/Engine/Classes/GameFramework/PlayerController.h
UObjectBase ___UObjectBaseUtility ______UObject _________AActor ____________AInfo _______________AGameMode
Oyunun kurallarının belirlendiği, kazanma durumlarının hesaplandığı, oyun içi mantığını yöneten sınıftır. Runtime/Engine/Classes/GameFramework/GameMode.h
52
Ayrıntılı bilgi almak için:
53
Static Mesh, 3DS Max, Maya, Blender gibi modelleme programlarında oluşturulmuş ve
UE4 aktarılmış 3 boyutlu poligon modellerdir. Ekran kartı önbelleğinde tutulurlar. UE4’e aktarılmaları için “ FBX” formatında olmalıdırlar. UE4’e aktarmak için “ FBX” uzantılı dosyayı Content Browser ‘a ‘a sürüklemek yeterlidir. Alternatif olarak Content Browser ‘da ‘da yer alan Import düğmesini kullanabiliriz.
’daki Import d Content Browser ’daki Import düğmesi ile “FBX” dosyasını UE4’e aktarmak Aktarma işleminde sonra aktarma ayarlarının ayarlarının belirlendiği bir pencere açılır.
FBX” Aktarma ayarları p enceresi
54
seçeneğidir. Üstteki
Burada dikkat edilmesi gereken nokta
örnekte modelin çok küçük ölçekte aktarılmaması için ölçek “100” olarak ayarlanmıştır. Bu bir Static Mesh olduğu için üsttek i Import as Skeletal seçeneği işaretlenmemiştir. Aktarma işlemi başarı ile tamamlandığında göre Content Browser ‘da ‘da Static Mesh’i açalım.
Static Mesh Editor
Mor çizgi ile belirtilen alan Static Mesh’in çarpışma hacmidir. penceresindeki Auto penceresindeki Auto Generate Collision seçeneği işaretli olduğu için oluşturulmuştur.
Çarpışma hacmi olarak modelin kendisini kullanmamamızın sebebi bunun işlemciye çok yük getireceğinden dolayıdır. Menu Bar ‘da yer alan Collision seçeneği ile mevcut çarpışma hacmini kaldırıp, yeni çarpışma hacimleri oluşturabiliriz. “FBX” dosyası aktarıldıktan sonra Static Mesh ile beraber Material dosyası da gelmiştir. Material’i bir modelin giysisi olarak düşünebiliriz. Sağdaki
basit olarak cismin uzakta bulunduğunda performans
kazancı için render edilme kalitesini düşürür. Eğer hiçbir işlevi olmadan sadece oyunda bulunacaklarsa Content Browser ‘dan ‘dan Level’a sürüklenirler ve otomatik olarak Static Mesh Actor‘e dönüştürülürler.
55
Level’a sürüklenen bir Static Mesh
56
Material bir modele eklenen onun görsel olarak nasıl gözükeceğini belirleyen bir malzemedir. Modelin renk, metalik, saydam, pürüzsüzlük gibi özelliklerini belirler. Teknik bir açıklama yapmak gerekirse ışık modelin yüzeyine değdiğinde Material ışığın modelin yüzeyi ile nasıl bir görüntü oluşturacağını belirler. Yeni bir Material’i Content Browser‘ da Add da Add New
Material seçeneği ile ya da Content
→
‘da farenin sağ tuşuna tıklayıp Material’i seçerek oluşturabiliriz. Browser ‘da
Herhangi bir Material’i farenin sol tuşu ile tıkladığımızda Material Editor ’ü ’ü açarız.
Material Editor
57
Material Editor ’deki Graph
Texture’lerin Vector’lerin, matematiksel ifadelerin Node’lar olarak bulunduğu alandır. Yukarıdaki şekilde bir
ile bir Vector’ün
edilmesi yani çarpılmasının
sonucunu Viewport’ta görüyoruz. Yeni bir Node eklemek için farenin sağ tuşunu tıklayıp
eklemek istediğimiz Node’u seçmeliyiz. Örneğin bir virgüllü sayı eklemek istersek Node’unu eklememiz gereklidir.
Node’unun değerini Details
penceresinde değiştirebiliriz. Bir Vector’ü, Texture’ü, bir sayıyı oyun sırasında değiştirmek istersek o Node’a farenin
sağ tuşu ile tıklayarak P arameter’e dönüştürmemiz gereklidir.
58
Bir Vector’ün Parameter’e dönüştürülmesi
Material’in çıkış bağlantıları; Node’lar ile gerçekleştiren işlemler en sonunda bu ana Node’a bağlanır.
: Material’in hangi renkte olacağını belirler. : Material’in metal olup olmadığını belirler. Bir Material ya metaldir ya da metal değildir. Sadece 1 ya da 0 değerlerini alabilir, ara değer almaz.
Örnek altın Material’i
59
Çoğunlukla buraya bir Node bağlanmamalı ve varsayılan 0.5 değeri bırakılmalıdır. Eğer bir Material metal ise bu girişe bağlanılan bir Node’un işlevi yoktur. Bir Material’in ne kadar pürüzlü olduğunu belirler. Örneğin bir okyanus suyu Material’inin Roughness değeri 0.1’dir. Bir Material’in ne kadar ışık yansıttığını belirler. Işık yansıtması için Vector değerlerinin 1’den büyük olması gereklidir. Aşağıdaki örnekte Vector’ün “R(Red)
“ elemanının “100” olduğunu görüyoruz.
Emissive Color
Saydamlık. Bir Texture kullanıp Material’in istenilen kısmının saydam olması sağlanabilir. Opacity girişine bağlama yapabilmek için Final Material Inputs u seçip yapmamız gereklidir.
Details penceresinden Details penceresinden
Material’de gerçekte yer almayan ayrıntılar eklememizi sağlar. Bunun için mavi tonlu derinlik Texture’ü kullanılır. Bu ayrıntılar yalnızca birer yanılsamadır. Performans
kazancı için kullanılırlar.
60
Normal girişini anlamak için karşılaştırma
Farenin sağ tuşu ile Node eklemek yerine, bu pencereden de Node ekleyebiliriz. Material fonksiyonları burada bulunur. Örneğin “
fonksiyonu nesnenin
köşelerinin daha belirgin olmasını sağlar.
“Fresnel” örneği Yukarıdaki şekilde “Fresnel” fonksiyonu sayesinde nesnenin köşelerinin ışık saçması sağlanmıştır.
61
Seçilen Node’un özelliklerini değiştirmemizi sağlar. Final Material Inputs Node’unun Details Details penceresi Material oluşturulurken hayati derecede bir öneme sahiptir. İnsan
derisinin materialini oluşturmak için Final Material Inputs Node’unun Details penceresinde
‘i
olarak ayarlamalıyız.
Final Material Inputs Node Inputs Node’unun Details penceresi Details penceresi
Material’in ön izlemesi yapılır. Ön izleme için düz bir kâğıt, küre, küp, silindir gibi
modeller vardır. İstersek kendi istediğimiz bir modeli ön izleme modeli olarak belirleyebiliriz.
Kaydetme, Node arama, Final Material Inputs Node Inputs Node’una gitme, kullanılmayan Node’ları
silme gibi seçenekler vardır.
Menü çubuğu pek çok uygulamada karşılaştığımız gibi genel araçlara ulaştığımız bölümdür.
Bir material’i herhangi bir nesneye uygulamak için material’i Static Mesh ya da Skeletal Mesh bileşenindeki Material kısmına sürükleyip bırakmamız gereklidir. Bir mesh birden fazla Material’e sahip olabilir.
62
Bir diğer seçenek olarak Material kısmındaki açılabilir düğmeye tıklayıp açılan menüden uygulamak istediğimiz Material’i seçmemiz gerekir.
Bir Material’i bir Mesh’e sürükleyip bırakarak uygulamak
Örnek Material’in bir Mesh’teki görüntüsü
63
UE4’te animasyon işi mümkün olduğunca oyun içi koddan ayrılmaya çalışılmıştır. Bu oyun yapım işini ve ekip çalışmasını kolaylaştırır. UE4’te animasyon ile uğraşmamızın gerekli olduğu durumlarda
adı verilen animasyon editörünü kullanırız.
Persona’yı açmak için herhangi bir S keleton, Skeletal Mesh, animasyon veya Animation Blueprint açmamız yeterlidir. Fakat tercih edilen dosya Animation Blueprint’i
açmaktadır. Çünkü bu şekilde Persona’daki 4 dört sekmeye de ulaşırız. Persona’daki bu 4 bölümde bulunan pencerelerin hepsi farklı pencere değildir. Kimii bölümlerde aynı pencereler bulunmaktadır. Örneğin Skeleton ve Animation bölümlerinin ikisinde de penceresi bulunmaktadır. Örneğin örnek projemiz de karakterin k arakterin Animation Blueprint’ini açalım.
Persona’da sağ üstte y eralan sekmeler
Bu sekmelerden öncelikle
sekmesine tıklayalım.
Persona’nın Skeleton sekmesi Skeleton sekmesi
64
Skeleton, Mesh, Mesh, Animation ve Animation ve Graph bölümleri arasında geçiş Bu sekmelere tıklayarak Skeleton,
yaparız. Eğer Persona’yı animation blueprint’ten açmaz isek en sonda yer alan Graph sekmesi çıkmayacaktır, bundan dolayı mümkün olduğunda Animation Blueprint ile Persona’yı açmak gereklidir.
Bu iskelet ağacı hiyerarşik bir biçimde eklemleri(joint) gösterir. Bu hiyerarşik gösterim bir eklemin hareket ettiğinde onun altından bulunan ekleminde hareket etmesi demektir. Bu pencerede bir ekleme
ekleyebiliriz. Socket bir elde silah
bulundurulması ya da bir kafada şapka bulundurulması gibi durumlarda gerekli olur. Socket eklemek için tek yapmamız gereken bir eklemde sağ tıklayıp seçeneğine tıklamamızdır. Bu iskelette silah tutmak için “ “
” ekleminde,
” adında bir Socket vardır. Bir Socket’e tutturulacak olan malzemenin nasıl
göründüğünü görmek için, Socket’e sağ tıklayıp
seçeneğinden
görüntülenmek istenen nesneyi seçmemiz yeterlidir. Unutulmamalıdır ki bu malzeme sadece ön izleme içindir.
Bir Socket’e ön izleme malzemesi konulması
65
Ön izleme malzemesi eklendikten sonraki görünüm Sağda yer alan Details penceresinde socketin konum, yön, ölçek gibi özellikleri ayarlanarak istediğimiz görüntüyü elde etmeye çalışırız.
Mevcut Skeletal Mesh’i gördüğümüz penceredir. Mesh’te bir noktaya tıklarsak en yakın eklemin ismi belirtilir. Kamerayı hareket ettirmek için tüm Viewport’lardaki ortak tuşları kullanırız.
Seçili Socket’in özelliklerinin göründüğü penceredir.
Bir Socket’in Details penceresi Details penceresi
Bu bölümde kaydetme, mevcut malzemeyi Content Browser ’da ’da gösterme, işlevi bulunur.
bir animasyonu başka bir
karakterde(iskelette) kullanmayı sağlayan işlemlerdir.
66
Menü çubuğu pek çok uygulamada karşılaştığımız gibi genel araçlara ulaştığımız bölümdür.
Sağ üstteki sekmeden
’e tıklayıp Mesh bölümünü açalım.
Persona’nın Mesh sekmesi Mesh sekmesi
Bu sekmelere tıklayarak Skeleton, Skeleton, Mesh, Mesh, Animation ve Animation ve Graph bölümleri arasında geçiş
yaparız. Eğer Persona’yı animation blueprint’ten açmaz isek en sonda yer alan Graph sekmesi çıkmayacaktır, bundan dolayı mümkün olduğunda Animation Blueprint ile Persona’yı açmak gereklidir.
Bu bölümde Mesh ile ilgili çeşit özellikler ayarlanır. Bu ayarlardan biri
’dur.
basit olarak cismin uzakta bulunduğunda performans kazancı için render edilme kalitesini düşürür.
kısmı Mesh’e hareket edebilen bir kıyafet
eklememiz sağlar. Bu kıyafet oyuncunun hareketlerine göre hareket edebilir.
67
Mevcut Skeletal Mesh’i gördüğümüz penceredir. Mesh’te bir noktaya tıklarsak en yakın
eklemin ismi belirtilir. Kamerayı hareket ettirmek için tüm Viewport’lardaki ortak tuşları kullanırız.
Genellikle yüz ifadeleri içeren animasyonların ön izlemesi için kullanılır.
Bu bölümde bölümde kaydetme, mevcut malzemeyi Content Browser ’da ’da gösterme gibi işlevler vardır.
Menü çubuğu pek çok uygulamada karşılaştığımız gibi genel araçlara ulaştığımız bölümdür.
Persona’nın Animation sekmesi Animation sekmesi
Bu sekmelere tıklayarak Skeleton, Skeleton, Mesh, Mesh, Animation ve Animation ve Graph bölümleri arasında geçiş yaparız. Eğer Persona’yı Animation Blueprint’ten açmaz isek en sonda yer alan Graph 68
sekmesi çıkmayacaktır, bundan dolayı mümkün olduğunda Animation Blueprint ile Persona’yı açmak gereklidir.
Bu iskelet ağacı hiyerarşik bir biçimde eklemleri(joint) e klemleri(joint) gösterir. Bu hiyerarşik gösterim bir eklemin hareket ettiğinde onun altından bulunan ekleminde hareket etmesi demektir. Bu pencerede de Skeleton bölümünde olduğu gibi bir ekleme Socket ekleyebiliriz.
Mevcut Skeletal Mesh’i gördüğümüz penceredir. Mesh’te bir noktaya tıklarsak en yakın eklemin ismi belirtilir. Kamerayı hareket ettirmek için tüm Viewport’lardaki ortak tuşları kullanırız.
Seçili Socket’in özelliklerinin göründüğü penceredir.
Seçili animasyon malzemesine göre çeşitli ayarların yapıldığı penceredir.
Animation Sequence’de istediğimiz Frame’e gidebildiğimiz, istediğimiz Frame’e
ekleyebildiğimiz penceredir. , bir animasyonun belirlenilen Frame’inde gerçekleşmesi istenen olaylar için
oluşturulur. Örneğin bir patlama efektini göstermeyi, bir ses çalmayı ya da C++ ya da blueprint ile oluşturulan bir çeşit işlemi gerçekleştirebilmeyi sağlar. Farenin sağ
düğmesine tıklanıp oradan istenilen türde Notify ekleyebiliriz.
69
Bir Animation Sequence’de Notify eklemek
Burada mevcut iskeletin kullanıldığı animasyon malzemelerini görürüz. : Tek bir animasyondur. : Animation Sequence’lerden oluşan özel bir malzemedir. Örnek
vermek gerekirse bir karakterin bir sağ yumruk bir sol yumruk vurduğu durumda, karakter yumruk atmaya başlar ve animasyon bir döngüye girer. Eğer karakteri sağ yumruk atarken animasyon bitecek ise sağ yumruğun bitme animasyonu çağrılır.
: Çok sayıda animasyonun bir ya da iki değere göre harmanlanmasıdır. Örnek olarak durma, yürüme, koşma Animation Sequence’imiz olduğunu düşünelim. Karakterimizin hızı 0 iken durma animasyonu oynatılır. Karakterin hızı “ 100” iken yürüme animasyonu oynatılır. Karakterin hızı “200” iken koşma hızı oynatılır. Karakterimiz hızı “150” ise yürüme ve koşma animasyonu harmanlanıp yürüme-koşma
arası bir animasyon oynatılır.
Bu bölümde kaydetme,
mevcut malzemeyi Content Browser ’da ’da gösterme, yeni
animasyon malzemesi oluşturma gibi işlevler vardır.
Menü çubuğu pek çok uygulamada karşılaştığımız gibi genel araçlara ulaştığımız bölümdür. 70
Persona’nın Graph sekmesi Graph sekmesi
Anim Graph b Graph bölümü
Bu sekmelere tıklayarak Skeleton, Skeleton, Mesh, Mesh, Animation ve Animation ve Graph bölümleri arasında geçiş yaparız. Eğer Persona’yı Animation Blueprint’ten açmaz isek en sonda yer alan Graph sekmesi çıkmayacaktır, bundan dolayı mümkün olduğunda animation blueprint ile Persona’yı açmak gereklidir.
Mevcut Skeletal Mesh’i gördüğümüz penceredir. Mesh’te bir noktaya tıklarsak en yakın
eklemin ismi belirtilir. Kamerayı hareket ettirmek için tüm Viewport’lardaki ortak tuşları kullanırız. 71
Bu bölümde Node’lar sayesinde Animation Blueprint’in uygulandığı Pawn’dan türemiş
sınıfın nesnesinin verileri alınır. Örneğin karakterin hızı, havada bulunup bulunmadığı gibi değerler karakterden alınıp değişkenlere atanır. Bu şekilde bir kullanım bir Animation Blueprint’i farklı karakterlere uygulamayı ve animasyon ile oyun içi kodu
birbirinden ayırmayı sağlar.
Anim Graph’ta “IsMoving” değişkeninin atanması
Yukarıdaki şekilde “
” değişkeninin atanmasını görüyoruz. “Velocity”, hız ve
yönü içeren bir vektördür. Eğer vektör 0’dan büyük ise bu karakterin hızı var anlamına gelir.
Burada değişkenlerin değerleri belirlenip Viewport’ta animasyonun ön izlemesi görülür. “Is Moving” değişkeni “true” yapıldığında, karakterimizin silahını sağa sola salladığı görülür. sekmesinde değişkenlerin varsayılan değerlerini atayabiliriz.
Bu Blueprint’e eklediğimiz değişkenler, fonksiyonlar, makrolar gözükür.
Seçili değişkenlerin ayarları gözükür. 72
Bu bölümde kaydetme,
mevcut malzemeyi Content Browser ’da ’da gösterme, yeni
animasyon malzemesi oluşturma gibi işlevler vardır.
Menü çubuğu pek çok uygulamada karşılaştığımız gibi genel araçlara ulaştığımız bölümdür.
Bu bölümde EventGraph’ta oluşturduğumuz değişkenleri kullanarak karakterin animasyonu belirlenir. İş kolaylığı açısından
kullanılır. State Machine’i
açmak için çift tıklamamız yeterlidir. Bu State Machine’de karakterin durumu parçalar ayrılır ve bu durumlardan başka bir duruma geçişi sağlamak için geçiş(transi tion) kuralları vardır.
State Machine
Yukarıdaki şekilde bir State Machine’in içini görüyorsunuz. Oklar geçiş yönlerini ifade eder. “FFP_Idle” durumundan “FPP_Run” durumuna geçiş için “IsMoving” değişkeninin “true” olması gereklidir.
73
State Machine’de bir geçiş durumu State Machine’de bir geçiş durumunun üzerine farenin imlecini getirdiğimizde açılır
küçük pencerede geçiş durumunun ne olduğunu görebiliriz. Eğer geçiş durumuna çift tıklarsak geçiş durumunu düzenleyebileceğimiz bir pencereyi açarız.
Geçiş durumu penceresi Geçiş durumunda bir boolean değişkeninin Boolean değer kabul eden bir Node’a bağlandığını görürüz. Tüm işlemlerin sonucunda sayesinde geçiş yapılıp-yapılamayacağına karar veririz.
“FPP_Idle” durumu
74
Node’u
Bu geçiş yapılan durumlarda ise animasyon malzemeleri Node’una bağlanır. Yukarıda görülen “
” karakterin boş bulunduğu
durumda oynatılan animasyondur.
Animasyonu bir karaktere uygulamak için yapmamız gereken tek şey editörde Details penceresinden, Animation Blueprint Blueprint seçeneğinden, uygulamak istediğimiz Animation Blueprint Blueprint’i seçmektir.
Karaktere Animation Blueprint’i uygulamak
75
Cascade, UE4’de bulunan parçacık editörüdür. Herhangi bir parçacık malzemesini
açarak ulaşabiliriz. Parçacık editörleri ateş, duman, kıvılcım , patlama efekti gibi varlıkları oluşturmayı sağlarlar. Yeni bir parçacığı, Content Browser ’da ’da sağ tıklayıp ’i seçerek oluşturabiliriz. Parçacığı Level’a sürüklediğimiz zaman otomatik olarak
nesnesi oluşturulur ve parçacığımız Level’da Emitter
nesnesinin bileşeni olarak yer alır. “ Starter Content” ile örnek parçacıklar gelmektedir. Örnek bir parçacığı açalım: Content Starter Content →
Particles
→
P_Fire
→
Cascade
Mevcut Particle System’i gördüğümüz penceredir. Kamerayı hareket ettirmek için tüm viewport’lardaki ortak tuşları kullanırız.
Particle System’de mevcut olan tüm Emitter’ler görülür ve Emitter’ların Module’leri listelenir. Emitter Particle System’i oluşturacak olan bölümlerdir. Üstteki örnekte iki adet
“Flames” Emitter’i görülür bunları soldaki tik işaretine basarak görünmez hale 76
getirdiğimizde hiçbir alev gözükmez ve diğer Emitter’ler gözükür. Diğer Emitter’ler közleri(Embers), dumanları(Smoke), ateş sıçramalarını(Sparks) oluşturur.
İki adet “Flames” Emitter’i kapatıldıktan sonraki görüntü Yeni bir Emitter’i Emitters Emitters penceresinin boş bir alanında sağ tıklayıp
seçeneğini seçerek ekleyebiliriz.
Yeni bir Emitter oluşturmak
77
Yeni oluşturulan Emitter
Emitter’i seçip Details penceresinde çeşitli ayarlarını değiştirebiliriz.
Emitter’in Details penceresi Details penceresi “Emitter”’ler tek başlarına bir anlam ifade etmez sahip olduğu “modüle”’ler “ emitter”’e şekil verir. İki çok önemli Module vardır bunlara
ve
Module’leridir. Bu
iki Module silinemezler ve mutlaka bulunmak zorundadırlar. Required Module’ünde
’de oluşturulur. Emitter’in Material’i ayarlanır. Emitter’in Materi al’i Material Editor ’de
78
“Flames” Emitter’inin Required Module’ünde Material özelliği Spawn Module’ünde başlangıçta ne kadar Emitter oluşturulacağı, zamana bağlı olarak ne kadar Emitter oluşturulacağı gibi ayarlar yapılır. Yeni bir Module oluşturmak için Emitter üst bölümünde sağ tıklayıp açılan menüden
eklemek istediğimiz Module’ü seçeriz. TypeData TypeData kategorisindeki Module’ler mevcut Emitter’in türünü değiştirirler.
79
Yeni Module eklemek
Beam Data kullanılarak oluşturulmuş bir Emitter
Bazı önemli Module’ler:
: Bir Emitter’in ne kadar süre ile yaşayacağını belirler.
: Emitter’in rengini zaman içerisinde değiştirir. : Başlangıçta sahip olduğu büyüklük belirlenir.
: Başlangıç hızı belirlenir.
: Işık eklenir ve özellikler belirlenir.
: Yaşam süresine bağlı olarak Emitter’in büyüklüğü belirlenir.
’de düzenlemek istediğimiz verileri, Module’leri sağ tarafında yer alan eğri simgesine tıklayarak Curve Editor ’de ’de gözükmesini sağlayabiliriz. Emitters penceresinde, Emitters penceresinde,
80
Lifetime Module’ünün Curve Editor ’de ’de düzenlenebilen verileri Üstteki örnekte 0.7 – 1.0 değerleri arasındaki verinin Curve Editor ’deki ’deki durumunu görüyoruz. Bu verinin sadece en düşük ve en yüksek değeri olacağı için Curve Editor ’de ’de düzenlemek çok yararlı olmayabilir.
’ü etkili kullanabileceğimiz bir örnek Curve Editor ’ü
Mevcut Particle System, Emitter ya da Module’ün özellikleri burada değiştirilir.
81
Verileri görsel bir arayüzde düzenlemek için kullanılır. Ctrl ve farenin sol düğmesi ile yeni nokta ekleyebiliriz.
Kaydetme, Viewport’ta gösterilen simülasyonu yeniden başlatma, Viewport’un
arkaplanını değiştirme, LOD(Level of Details) gibi işlevlerin gerçekleştirebilindiği penceredir.
Menü çubuğu pek çok uygulamada karşılaştığımız gibi genel araçlara ulaştığımız bölümdür.
Bir Particle System’i bir nesneye bileşen olarak eklemek için Blueprint editöründen Add Component seçeneğine tıklayarak ParticleSystem’i seçmeliyiz.
Particle System eklenen bir nesne
ParticleSystem bileşeni eklendikten sonra, eklediğimiz bileşeni seçip Details penceresinde Template kısmında “P_Fire”’ı seçelim.
82
Particle System bileşeninde Template s Template seçimi
Particle System bileşenini dilediğimiz gibi konumlandırabiliriz. Bileşen olarak eklendiği için oyunda nesne hareket ettiğinde bileşenimizde hareket etmiş olacak.
Particle System bileşeninin Template seçimi ve konumladırmasından sonraki durum
83
Particle System bileşeni eklenen nesnenin oyun içi görüntüsü
84
UMG kullanıcılara gösterilmek üzere oyun içi bilgilerin(Can, kurşun, silah vs.), menülerin oluşturulduğu bir editördür. İki adet sekmesi vardır:
Designer : Tasarımın yapıldığı bölümdür.
Graph: İşlevselliğin sağlandığı bölümdür.
Oluşturmak için Content Browser ’da ’da sağ tıklayıp User Interface bölümünden Widget ’daki Add New Blueprint’i seçmemiz gereklidir. Bir diğer seçenek olarak Content Browser ’daki düğmesini de kullanabiliriz.
Widget Blueprint oluşturma
Oluşturduğumuz dosyayı farenin sol tuşunu çift tıklayarak açabiliriz. UMG için “ Starter Content”’ta bir örnek yok, bunun için kendim bir örnek oluşturdum. Bu örnekte ana karakterimizin “Health” adında Float ve “HealthText” adında bir “Text” değişkeni vardır. Ana karakterimizin “Health” değeri her saniye bir azalmakta ve bu değer “ HealthText”
değişkenine dönüştürülmektedir.
85
Widget Blueprint Designer sekmesi sekmesi
Designer ve ve Graph arasında geçiş yapabildiğimiz sekmeler.
Buradaki çeşitli pencere elemanlarını Hierarchy penceresine sürükleyip kullanıcı
arayüzünü oluştururuz. Panel bölümündeki pencere elemanları, diğer pencere elemanlarını hizalı ve düzgün bir şekilde tutmakta görevlendirilirler.
Pallette penceresinden pencere elemanları buraya sürüklenir ve burada hiyerarşik bir
yapı oluştururlar. Border pencere elemanlarına arka plan vermeyi sağlar. Horizontal Box içindeki pencere elemanlarını yatay bir şekilde hizalar. Text Block ekrana yazı yazdırır.
86
Burada tasarladığımız kullanıcı arayüzünü görürüz ve görsel olarak taşıma işlemlerini gerçekleştirebiliriz.
Hierarchy penceresindeki pencere elemanlarının özelliklerinin ayarlandığı bölümdür. Border pencere elemanının Details kısmına bakarsak Slot bölümünde pencere
elemanının ekranda nasıl konumlandırılacağına yönelik özellikleri görürüz. pencere elemanının neye göre konumlandırılacağını belirtir. Örneğin bir pencere elemanının Anchor’unu sol üst köşe olarak belirtirsek sol üst köşeye göre konumlandırılır. Her ekranın çözünürlüğü farklı olduğu için bu şekilde bir çözüm geliştirilmiştir.
Bir pencere elemanının Details penceresi Details penceresi
87
Anchor’lar
Bir nesneye ait olan bir değişkeni pencere el emanında göstermek için onu pencere elemanın “
” özelliğine bağlamamız gereklidir. Bunun için öncelikle Graph
sekmesinde nesneye “cast” ederek nesnenin bir referansını almamız gereklidir.
Bağlamak istediğimiz değişken Text türünde olmalıdır. Bundan sonra tek yapmamız gereken
düğmesine tıklayıp, bağlamak istediğimiz değişkeni seçmektir. Nesnenin
değişkeni değiştikçe, pencere elemanın Text özelliği de değişecektir. Bunun sonucunda ekrandaki değer değişmiş olacaktır. Değişkeni yalnızca Text özelliğine bağlamak zorunda değiliz, bağlamanın mümkün olan özelliklerin sağında Bind düğmesini görürüz.
88
Bir veriyi bir pencere elemanın özelliğine bağlama
Bağlanan bir değişken
Pencere elemanlarına animasyon yapmak istersek bu pencereyi kullanacağız. Önce +Animation düğmesine tıklayarak yeni bir animasyon oluşturmamız gereklidir.
Animasyon edilmesi istenen özelliklerin sağında bulunan anahtar simgesine tıklayarak Timeline’da anahtarı oluşturmamız gereklidir. Timeline’da istediğimiz bir zamana
giderek
yine
anahtar
simgesine
tıkladığımızda
animasyonlaştırılır.
89
otomatik
olarak
özellik
Pencere elemanının animasyonu Yukarıdaki şekilde 0 ile 1 saniye arasında bir pencere elemanının animasyon ile sağdan sola doğru hareket etmesini görüyoruz. Oluşturduğumuz animasyonları bu Widget Blueprint’in referansını alıp oynatabiliriz.
Üretilen animasyonların zaman çizelgesidir. Farklı zamanlarda, pencere elemanlarının istenilen özelliğini değiştirip anahtar ekleyerek animasyon oluşturulur.
Derleme, kaydetme gibi işlevlerin gerçekleştirildiği bölümdür.
Menü çubuğu pek çok uygulamada karşılaştığımız gibi genel araçlara ulaştığımız bölümdür.
90
Widget Blueprint Graph Sekmesi Graph Sekmesi Widget Blueprint’in Graph sekmesi Graph sekmesi normal bir Blueprint sınıfı ile neredeyse aynıdır.
Designer ve ve Graph arasında geçiş yapabildiğimiz sekmeler.
Bu Blueprint’in sahip olduğu graph’lar, fonksiyonlar, makrolar, değişkenler, event dispatcher’lar burada bulunur.
Görsel olarak programlama yapabildiğimiz alandır. Bir Blueprint sınıfındaki “BeginPlay” Event’inin yerine Construct Event’i vardır. Bu Event’te referans alınmak istenilen nesneye “cast” yapılır. Bu şekilde o nesnenin değişkenlerini pencere elemanlarının
özelliklerine bağlayabiliriz.
91
Widget Blueprint’te bir nesnenin referansının alınması
Class Settings, Settings, Class Defaults ya da sol üstteki bileşenlerin özelliklerinin göst erilip,
değiştirildiği bölgedir.
Derlenme işleminden sonra bize sonucu bildiren bölümdür. Eğer hata var ise burayı inceleyerek hatayı çözebiliriz.
Derleme, kaydetme gibi işlevlerin gerçekleştirildiği bölümdür.
Menü çubuğu pek çok uygulamada karşılaştığımız gibi genel araçlara ulaştığımız bölümdür.
92
Oluşturduğumuz Widget Blueprint’i ekrana yerleştirmek için duruma uygun bir nesne seçilir. Biz örneğimizde “First Person BP”’ini kullanacağız. Aşağıda ekrana yerleştirme için gerekli blueprint kodunu görebilirsiniz.
Widget Blueprint’i Blueprint ile ekrana yerleştirmek
Ekrana yerleştirilen Widget Blueprint’in oyun içi görüntüsü
93
Ses dosyalarını UE4 kullanmak için tek yapmamız gereken dosyaları UE4’ün Content Browser penceresine sürüklemektir. UE4 16 bit “WAV” uzantılı dosyaları kabul etmektedir. 44100 Hz ya da 22050 Hz tavsiye edilen frekanslardır. UE4’e aktarılan ses
dosyaları
olarak adlandırılırlar.
UE4’e aktarılan ses dosyaları
Aktarma işleminden sonra Sound Wave dosyaları Sound Wave dosyalarını Level’a sürüklediğimiz zaman otomatik olarak Level’a olarak yerleştirilirler. Bu nesnenin Sound Component’inden çeşitli özelliklerini değiştirmemiz mümkündür. “Auto Activate” özelliği açık olduğundan dolayı oyun başlar başlamaz çalmaya başlarlar. özelliği sesin seviyesini belirtir. çalıncağını belirtir.
özelliği sesin ne hızla
kategorisinde ise ses kaynağından ne kadar
uzaklaşınca ses seviyesinin azalacağı belirlenir.
94
Level’a yerleştirilen bir Sound Wave
Ambient Sound Actor’ün özellikleri
95
Tabii ki ses dosyalarını oyundaki duruma göre oynatmak isteyebiliriz. Bu durumda Blueprint’te
Node’unu kullanabiliriz.
Blueprint’te bir ses dosyasını nesnenin o anki konumunda çalma Yukarıdaki örnekteki kod ana karakterin Blueprint sınıfına yerleştirilmiştir. F tuşuna basıldığında karakterin mevcut konumunda ses dosyasını çalacaktır.
96
Matinee UE4’te bulunan bir animasyon düzenleyicisidir. Bu araç sayesinde oyun içinde özelliklerin animasyonları veya sinematikler oluşturabiliriz. Bu animasyonları olarak adlandırılan bir nesne tutar. Yeni bir Matinee Actor’ü UE4 editörünün ’ında yer alan Matinee simgesine tıklayıp Add Matinee seçeneğini seçerek Toolbar ’ında oluşturabiliriz.
Yeni bir Matinee oluşturmak
Level’da yer alan bir Matinee Actor Örnek olarak hazırlanmış Matinee’yi açalım.
97
Matinee e Matinee editörü
UE4’ün pek çok noktasında karşılaşabileceğimiz eğri düzenleyicisidir. Ctrl ve farenin sol tuşu ile yeni bir nokta ekleyebiliriz. Horizontal ve Vertical düğmeleri eğimi mevcut Auto, Break , Linear gibi düğmeler mevcut eğrinin ekrana yatay ve dikey olarak sığdırır. Auto,
eğimini düzenleme de kullanılır.
Bir nesne ile eşleştirilmiş
’lar burada bulunur. Groupların altında ise nesnelerin
animasyonunda kullanılacak olan
’ları bulunur.
Yeni bir Group ekmek için boş bir alanda farenin sağ tuşuna tıklayıp eklemek istediğimiz Group çeşidini seçmemiz gereklidir.
98
Matinee’de yeni bir Group oluşturmak Adlarından da anlaşılacağı üzere kameralar için Mesh’ler için
kullanılmalı, Skeletal
, Particle System’ler için
kullanılmalıdır.
, ışıklar içinse
sıradan nesneler(Actor, Static Mesh
Actor, vs.) için kullanılmaktadır. Group’u oluşturduktan sonra bu Group’a nesne
eklemek için öncelikle nesneyi Level’da seçip, sonra
editörüne gelip, Group’un
adı yazan bölgede sağ tıklayarak Actors açılır menüsünden seçeneği seçilir.
Bir nesneyi Group’a eklemek
99
Bir Group’a Track eklemekte aynı şekilde Group adına farenin sağ düğmes i tıklanarak yapılır. Üstteki şekilde hangi Track’ları ekleyebileceğimiz gözüküyor. Bizim örneğimizde yer alan Track’lar; Movement Track, Event Track ve Visibility Track’tır.
Bir Group’un Track’ları Zaman çizelgesinin altında ki yeşil bayraklar başlangıç ve bitiş zamanını belirtir. Üstteki Track’ları dikkatli incelersek bazı zaman bölümlerinde anahtar simgelerini görürüz. Bir anahtarı eklemek için zaman çizelgesinde istediğimiz bir zamana gidip “Enter” tuşuna basmamız gereklidir. Movement Track’ı düzenliyorsak zaman çizelgesine anahtar ekleyip, ana editörde
nesneyi hareket ettirirsek otomatik olarak anahtar değeri eklenmiş olur. Bu işlemi bir sonraki zamanda tekrarlar isek, nesneyi zaman içerisinde hareket ettirmiş oluruz. Event Track’te anahtar eklemek istediğimizde bizden Event ismi istenir. Buraya yaptırmak istediğimiz işe uygun bir ad girmek gerekir. Visibility Track’te anahtar eklediğimizde sadece görünürlük seçeneklerinde Show , Hide ve Toggle değerleri vardır. Toggle seçeneği nesne görünür ise görünmez, görünmez ise
görünür yapar.
100
Matinee’de bir Group’a ekli olan nesnenin Movement Track’i animasyona doğrudan Level ile erişimi sağlar
Üstteki örnekte Matinee’de nesnenin Movement Track ’ini ’ini seçip, ana editörde baktığımızda mor çizgiler nesnenin hareketini belirtir. Eğer sinematik oluşturmak istersek kameraları kullanmamız gereklidir. Bir Director Group ekleyerek bir film yönetmeni gibi hangi kameranın görüntülerinin görüntüleri nin kullanılacağını belirlememiz gerekir. Çeşitli kamera efektleri ile sinematiğimizi süsleyebiliriz. Oluşturduğumuz animasyonu Level Blueprint’te kolay bir şekilde oynatabiliriz. Bunun için öncelikle Level’da
’u seçip Level Blueprint’i açmamız gereklidir. Event
Track’a ulaşmak için Create a Matinee Controller for MatineeActor_3 seçeneğini seçip Node’unu ekleriz. Matinee Actor’e referans alıp animasyonu oynatma, durdurma gibi işlemleri yapabilmek için Create a Reference to MatineeActor3
seçeneğini seçeriz.
101
Matinee Actor özelleşmiş bir sınıf olduğundan dolayı Matinee Controller adlı özel bir Node’a sahiptir
Matinee’de oluşturulmuş bir animasyonu o ynatma
Yukarıdaki örnekte kırmızı renkli Node giriş verilerinden gelen bildirimi belirtir. “E” tuşuna bastığımızda oluşturduğumuz animasyon oynatılacaktır. Sarı renkli olan Node Matinee Controller ’dır. ’dır. Event Track ile oluşturduğumuz “Test Event” görülmektedir. “ Test
Event”’i belirlendiği zaman diliminde yukarıda
programlanan olaylar gerçekleşecektir. Yani bir noktada bir kere ile sınırlı bir şekilde
“BP_EffectFire” nesnesi oluşacaktır.
102
bağlantısı ise varsayılan olarak gelmekte ve animasyon bittikten sonra yapılacak olaylar için kullanılmaktadır. Yukarıdaki örnekte animasyon bittikten sonra Node’u sayesinde tersten oynatılacaktır.
Animasyonun oyun içi görüntüsü
Track’lerin ayarlarının yapılabildiği bölümdür.
Zaman çizelgesine anahtarın eklenebildiği, oynatma seçeneklerinin bulunduğu, eğrinin eğim ayarlarının yapılabildiği bölümdür.
Menü çubuğu pek çok uygulamada karşılaştığımız gibi genel araçlara ulaştığımız bölümdür.
103
Açık dünya araçları dağlar, vadiler, mağaralar gibi yer şekilleri oluşturmamızı sağlar. Ağaçlar, çalılar, taşlar gibi nesneleri tek tek yerleştirmek çok fazla zaman alacağından dolayı ve rastgeleliği ihtiyacımız olduğundan bu araçlar işimizi önemli ölçüde kolaylaştırır. UE4 editörünün sol üstünde yer alan Modes penceresinden öncelikle dağ aracılığı ile yer kabuğumuzu oluştururuz. Oluşacak geniş
simgesi olan
düzlük alanı
aracı ile yontarak istediğimiz şekli vermeye çalışırız.
Landscape a Landscape aracı
Yontma işleminden sonra yer kabuğu 104
seçeneğinin yanında yer alan
aracılığı ile yer kabuğumuzu Material ile
boyama işlemini gerçekleştiririz. Bunun için özelleştirilmiş bir Material kullanılır. Material’inde kullanılan bir Node sayesinde boyanacak olan katmanlar otomatik olarak
bölümünde bulunur. “
” nesnesine özelleştirilmiş olan
Material’i uygularız.
Landscape a Landscape aracında Paint i Paint işlevi
Yer kabuğumuzun üzerine rastgele biçimde bitkiler ya da taşlar doldurmak için simgesinin sağındaki bitki resmine tıklayıp
Foliage a Foliage aracı
105
bölümünü açmalıyız.
düğmesine tıklayıp eklenen Foliage Type’ın Mesh’ini belirleyip, ayarları yaptıktan sonra farenin sol tuşunu Level’ da sürükleyince otomatik olarak nesneler üretmiş oluruz. Yukarıdaki şekilde Foliage aracı ile kolayca üretilen ağaçlar gözüküyor.
106
Unreal Engine 4, 3 boyutlu oyunlara yönelik olarak oluşturulmuşsa da 2 boyutlu oyun yapımını da destekler. Paper2D’nin temeli
adı verilen Texture’lere dayanır.
Koşma animasyonu için kullanılan Sprite’lar Yukarıdaki şekilde koşma animasyonunu oluşturan Sprite’lar görülmektedir. Herhangi ’u açarız. bir Sprite’a çift tıkladığımızda Sprite Editor ’u
Sprite Editor
107
Sprite Editor ’ün ’ün sağ üst köşesinde çeşitli sekmeler bulunmaktadır. : Mevcut Sprite’ın oyunda nasıl gözükeceğini gördüğümüz sekmedir.
Sprite’lar genelde tek olarak UE4’e yüklenmezler. Birden çok Sprite içeren Texture UE4’e yüklenir ve bu Texture Sprite’a otomatik dönüştürme seçeneği ile kolayca birden fazla Sprite’a dönüştürülür.
’ün Edit Source Region sekmesi Sprite Editor ’ün Region sekmesi Yukarıdaki şekilde 16 Sprite’ında tek bir Texture’den alındığını görüyoruz. Sprite’ın çarpışma hacmi belirlenir. Genellikle performans açsından kare şeklinde olur.
Sprite’ın çarpışma hacmi Sprite’ın hangi bölümünün gözükeceği ayarlanır.
108
Sprite’ların geçişleri ile oluşan animasyondur. Yukarıdaki 16 adet Sprite
koşma animasyonunu oluşturur. Sprite’lar belirlenen
değerine göre
sıra sıra oynatılır.
Flipbook
Yukarıdaki örnekte zaman çizelgesinin üstünde ardı ardına gelen Sprite’ları görüyoruz. Level’a normal bir nesne yerleştirilecek isek
bir karakter yerleştirecek isek
sınıfını kullanırız. Eğer sınıfını kullanırız.
Flipbook’u aşağıda gösterilen bölgede belirleriz.
109
Paper Character sınıfını kullanan bir nesne
Eğer temasta bulunmasını istediğimiz iki nesne var ise “ Z” konumlarını aynı yapmamız gereklidir.
110
Unreal Engine’in ilk sürümü Unreal Tournament adlı çok oyunculu oyun için
oluşturulmuştu. Yani Unreal Engine ağ desteğini ilk sürümden itibaren vermektedir. Bir oyunu çok oyunculu bir biçimde oluşturmak, tek kişilik bir oyun oluşturmaktan çok da zor değildir. UE4’ün çoklu oyuncu sunucu/istemci yapısı ile çalışır. Sunucu önemli işlemleri
gerçekleştirir ve tüm sunucuların senkronize bir şekilde işlem yapmasını sağlar. Sunucu istemciyi ilgilendiren değişkenleri istemciye “replicate” eder. Örneğin yapay zeka için kullanılan değişkenlerin istemciye gönderilmesine gerek yoktur. Hangi
değişkenlerin “replicate” edileceğini yazacağımız C++ kodunda ya da Blueprint’te belirtiriz.
Çoklu oyuncu için geliştirme yaparken başka bir bilgisayar ihtiyacımız yoktur. UE4 editöründe yapacağımız küçük bir ayarla aynı bilgisayarda 2 farklı oyuncuyu test edebiliriz.
Çoklu oyuncu ile oynama Yukarıdaki gibi oyuncu sayısını belirlediğimizde UE4 editöründeki oyun sunucu, yeni açılan penceredeki oyun ise istemcidir. Bu proje için kullanılacak örnek “Content Examples” içeriğinde bulunabilir. 111
Çoklu oyunculu sistemin temelinde
vardır. Replication bir nesnenin diğer
istemcilere gönderilip gönderilmeyeceğini belirtir.
Sunucudaki oyun
İstemcideki oyun Bu durumu oluşturan sebep çok basittir. Aşağıdaki şekilde görüldüğü üzere tek yapmamız gereken nesnenin
kategorisindeki Replicates özelliğidir. Soldaki
hayaletin istemcide gözükmemesinin sebebi Replicates özelliğinin kapalı olmasıdır.
112
Nesnenin Replicates özelliği Node’u sayesinde sunucu ve istemcide farklı işlemlerin
gerçekleştirilmesini sağlayabiliriz.
İstemcide nesnenin Material’i değiştirilmiştir
Switch Has Authority Node Node’u
113
Authority , kodun sunucuda çalıştırılacak olmasını belirtir. Remote ise Remote ise kodun istemcide
çalıştırılacak olmasını belirtir. Bu sayede Dynamic Material oluşturularak hayaletin rengi mavi yapılır. Nesneleri Replicate yaptığımız gibi istemcileri ilgilendiren değişkenleri de Replicate yapmamız gereklidir. Aksi takdirde istemciler değişkenin varlığından haberdar olmazlar.
Bir değişkenin Replication özelliği
Sunucuda bir değişkenin değeri Text Render bileşeninde gösteriliyor
114
İstemcide bir değişkenin değeri Text Render bileşeninde gösteriliyor Replicated özelliği olmayan değişkenin istemcide gözükmediğini görüyoruz. Eğer bir fonksiyonun sunucuda, istemcide ya da ikisinde birden gerçekleşmesini ’lar kullanacağız.
istersek
değeri fonksiyonun sunucu da
çalıştırılıp sonrada sunucunun istemcilerde bu fonksiyonu çalıştırmasını sağlaması anlamına gelir.
Custom Event’in Replicates özelliği
115
Yapay zeka oluşturmak için UE4’te özel yapılar oluşturulmuştur. Öncelikle yapay zeka karakteri “
” sınıfından oluşturulmuş bir nesne kontrol eder. Yapay zeka için
kullanılacak olan değişkenler
adı verilen bir dosyada tutulur.
“Blackboard” Behavior Tree yapılacak olan işlemleri belirler.
Behavior Tree 116
https://en.wikipedia.org/wiki/Unreal_Engine
https://en.wikipedia.org/wiki/Game_engine
http://www.ign.com/articles/2010/02/23/history-of-the-unreal-engine
https://docs.unrealengine.com/latest/INT/index.html
https://wiki.unrealengine.com/Main_Page
Unreal Engine 1 (https://de45xmedrsdbp.cloudfront.net/Resources/files/UE4Slate-1501456790.pptx) Unreal Engine 2 (https://de45xmedrsdbp.cloudfront.net/Resources/files/UE4Slate-1501456790.pptx) Unreal Engine 3 (https://de45xmedrsdbp.cloudfront.net/Resources/files/UE4Slate-1501456790.pptx)
Unreal Engine 1, 2, 3 ‘ün Render olarak karşılaştırılması (https://en.wikipedia.org/wiki/File:Unreal_Engine_Comparison.jpg) XYZ koordinatları (https://en.wikipedia.org/wiki/Cartesian_coordinate_system#/media/File:Coord_syst em_CA_0.svg)
117