UE4 C++ Giriş

Konuyu Oyla:
  • Derecelendirme: 0/5 - 0 oy
  • 1
  • 2
  • 3
  • 4
  • 5
UE4 C++ Giriş
#1
Sevgili Unreal Engine Türkiye üyeleri ve özellikle C++ kullanıcıları,

Bu yazıda, “Unreal Engine 4 C++” konusuna giriş yapılmıştır. Yazının içeriğinde, konuyla ilgili olarak, temel kavramlar, başlarken nelere dikkat edilmesi gerektiği, kod tasarımının nasıl yapılmaya başlanacağı, hangi yapıların nerelerde kullanılması gerektiğine dair en temel bilgiler verilmiştir. Uygulama esnasında, Windows üzerinde Unreal Engine 4.9.1 versiyonu kullanılmıştır. Farklı ortamlar ve farklı sürümlerin kullanımı, burada verilen örnek ya da uygulamaların çalışmamasına yol açabilir.

Herkese iyi kodlamalar.




1. UE4 C++’ A GİRİŞ


1.1. Geliştirme Ortamının Hazırlanması

Unreal Engine 4 C++ geliştirme ortamının hazırlanması için gerekli tüm süreçlere değinilmemiştir, bunun yerine zaten ayrı ayrı UE4 ve C++ kullananlar için; UE4 C++ üzerinde durulmuştur. UE4 ile örnek bir kod projesi oluşturulmuş ve proje derlenerek çalıştırılmışsa; “1.2. Yeni bir Kod Projesinin Oluşturulması” başlığına geçilebilir.

İlk olarak yapılması gereken, Visual Studio 2013 geliştirme ortamının(IDE) kurulmasıdır. Bu aşamada IDE sürümü(2013) önemli olmakla birlikte, hangi ticari paket(Express, Professional, Ultimate, MSDN… vs) olduğu önemsizdir. Kurulum tamamlandıktan bir sonraki aşamaya geçilebilir.



1.2. Yeni bir Kod Projesinin Oluşturulması

Unreal Engine 4, başlatılarak yeni bir kod projesi oluşturulur. Hazır proje taslakları altından basit kod projesi, “Basic Code” seçilir. Projenin kaydedileceği alan ve projenin adı belirlendikten sonra proje oluşturulur(Create Project). Bu aşama Şekil 1’ de gösterilmiştir. Her ne kadar UE4, proje ismini belirlerken, belirli bir uzunlukta girilen her karakter dizisinin kullanımına izin verse de; aşağıdaki kuralları uygulamak, kod sadeliği, kod anlaşılabilirliği ve kod düzeni açısından fayda sağlayacaktır. Ürün haline getirilmiş uygulamanın adı ve ilgili diğer bilgileri, proje içerisinde, proje ayarlarından değiştirilebilir ancak projenin kendi adı bu adımda belirlenir ve daha sonra değiştirilmek istendiğinde bazı zorluklarla karşılaşılacaktır.
• Baş harf(ler)in büyük, diğer harflerin küçük yazılması,
• Mümkün olduğunca kısa olması,
• Rakam, işaret, tire ve alt tire ve boşluk gibi karakterlerin kullanılmaması,
• İngilizce olmayan karakterlerin kullanılmaması (ASCII karakterlerin kullanılması) tavsiye edilir.


image.png
Şekil 1 - Proje Oluşturma

Proje başarılı bir biçimde oluşturulduğunda hem UE4 Editörü hem de Visual Studio açılacaktır. Bu aşamada UE4 Editörü, Visual Studio projesi üzerinden başlatılmadığından, Visual Studio üzerinde yapılan değişiklikler, UE4 Editörüne yansımayabilir. Bu sebeple Editör kapatılmalı ve Visual Studio projesi derlenip, çalıştırılarak başlatılmalıdır.

Kod bir kere derlenip çalıştırıldığında, kod üzerinde yapılan değişiklikler, Editör üzerinden de derlenebilir ve “C++ HotReload“ denilen bir yöntem sayesinde, değişikliklerin, hâlihazırda açık olan Editör’ deki projeye yansıması sağlanır(Unreal Reflection System ayrıca değerlendirilmiştir).

Eğer kod üzerinde değişiklik yapılmayacaksa, Editör üzerinden tasarım yapılacaksa; gerek Visual Studio gerekse de Editör kapatılarak, proje dosyası üzerinden sadece ve doğrudan Editör başlatılabilir. Editör’ ün, kodlama yapılmadığı zamanlarda tek başına kullanılması daha pratik olacaktır. Örneğin kodlamada yapılan bazı hatalar, çalışma sırasında meydana gelir. Kod derlenip çalıştırılabilse de çalışma sırasında meydana gelen hatalar yüzünden; Editör, kapanacaktır. Bu sırada Editör’ ü, Visual Studio üzerinden yeniden başlatmak daha çok zaman kaybına neden olabilecektir. Doğrudan Editör’ ü başlatmak, kod projesini derleyerek ya da derlemeden başlatmaktan daha pratik olacaktır.

Yine de temel amaç kodlama üzerine olduğundan ve özellikle de kod üzerinde değişiklik yapılacaksa, meydana gelmiş hatanın nedeni bulunup çözülmek isteniyorsa; Editör’ ün mutlaka Visual Studio üzerinden başlatılması tavsiye edilmektedir.



1.3. Visual Studio

Visual Studio’ nun az da olsa kullanılabildiği varsayılmış ve üzerinde fazla durulmamıştır. Başlangıç için derleme seçenekleri araç menüsünün genişletilmesi tavsiye edilir. Bunun için araç menüsüne sağ tıklanmalı, Özelleştir(Customize) seçeneği seçilmelidir. Ardından Komutlar(Commands) sekmesi altından Toolbar radyo düğmesi seçilmeli ve kombo menüsünden Standart(Standard) seçeneği seçilmelidir. Kontroller(Controls) listesinden Solution Configurations aracı, Modify Selection seçilip, Genişlik(Width) bölümüne 200 değeri girilerek; genişletilmelidir. Bu sayede Unreal Build System’ de hazır bulunan derleme seçenekleri görülebilecektir. Bu aşamalar Şekil 2’ de gösterilmiştir.


image.png
Şekil 2 - Solution Configuration Aracının Genişletilmesi

1.4. Unreal Build System

UnrealBuildTool(UBT), UE4 kaynak kodunun bir takım hazır derleme seçenekleri ile derlenmesini sağlar. Bunlardan başlıcaları “DebugGame”, “DebugGame Editor”,  “Development”, “Development Editor” ve “Shipping” seçenekleridir. Editör ile birlikte çalışırken, “Editor” seçenekleri kullanılır. Bu seçenekler Şekil 3’ de gösterilmiştir.

image.png
Şekil 3 - Derleme Seçenekleri ve Classes Yaklaşımı

UnrealHeaderTool(UHT), derleme sırasında, normal C++ derleyicisinden (Windows’ da Microsoft VC++ Compiler) önce devreye girip, otomatik oluşturulmuş başlık dosyalarını(generated header) oluşturan, UObject sistemi ile uyumlu bir araçtır. Bunu yapmanın temel amaçlarından bir tanesi, UE4 makrolarını(UCLASS, USTRUCT, UPROPERTY, UFUNCTION, GENERATED_USTRUCT_BODY, GENERATED_UCLASS_BODY, GENERATED_BODY) yorumlayıp, Reflection System için gerekli kodları, metadata verisini üretmektir.
Proje dosyaları, “GenerateProjectFiles.bat” dosyası kullanılarak, sıklıkla tekrar oluşturulmalıdır. Bu işlem “.uproject” dosyasına sağ tıklanarak da gerçekleştirilebilir. Genellikle projeye yeni bir modül eklendiğinde veya özellikle Editör dışından kod dosyası(.cpp, .h) eklenip, çıkarıldığında, Visual Studio kapatılmalı ve proje dosyaları yeniden oluşturulmalıdır. Bazı durumlarda, kod projesi, görünürde bir hata olmaması ya da sebebi bilinmeyen bir hata olması durumunda, derlenemeyebilir. Bunun büyük olasılıkla iki nedeni vardır. Birincisi, oluşan hata, UHT sebebiyle Error List penceresi altında gözükmeyebilir, ancak; Output penceresinde tam nedeni belirtilir. İkincisi, proje dosyalarının yeniden oluşturulması gerekliliğidir. Proje dosyalarının yeniden oluşturulması Şekil 4’ de gösterildiği gibi kolaylıkla yapılabilir(Visual Studio projesinin kapatılması gerekir).


image.png
Şekil 4 - Proje Dosyalarının Yeniden Oluşturulması

1.5. Kod Hiyerarşisi için bir Yaklaşım Önerisi

Unreal Build Tool, bazı özel klasörler için bazı özel işlemler yapar. Bunlardan bir tanesi “Classes” klasörüdür. Örneğin “Test” isimli bir kod projesi üzerinde oluşturulan “Classes” klasörü ve bunun içerisindeki tüm başlık(header) dosyaları, UBT tarafından otomatik olarak oluşturulan “TestClasses.h” başlık dosyası içerisinden çağrılır. Bu sayede, “TestClasses.h”, çağrıldığı yerde kullanıcı tarafından oluşturulmuş tüm başlık dosyalarının çağrılmasını sağlar. Varsayılan olarak, Visual Studio üzerinde kod için fiziksel klasör oluşturulamaz, ancak; filtre oluşturulabilir. Bahsedilen “Classes” klasörü fiziksel olarak oluşturulmalıdır. Fiziksel klasör oluşturmak için; ya Windows Gezgini kullanılmalı ya da Visual Studio üzerinde Solution Explorer penceresinden Tüm Dosyaları Göster(Show All Files) seçeneği aktifleştirilmelidir. Bu seçenek aktifleştirildiğinde, oluşturulan klasörler sanal(filtre) değil, fiziksel olacaktır. Bu adımlar Şekil 3’ de gösterilmiştir. Tavsiye edilen Windows Gezigini kullanmaktır. Klasör oluşturulurken ve mevcut kod dosyalarının yerleri değiştirildiğinde “1.4. Unreal Build System” başlığı altında bahsedilen, proje dosyalarının tekrar oluşturulması işlemleri yapılmalıdır.

Bu işlemi yapmak zorunlu değildir, ancak büyük ölçüde kolaylık sağlayacaktır. İki yöntemin de avantajları ve dezavantajları bulunmakla beraber, bu durum doğrudan UE4 ile ilgili olmayıp; C++ programlama dili ile ilgili olduğundan fazla üzerinde durulmamıştır. Şimdilik tavsiye edilen bu yaklaşımın kullanılması yönündedir.
Editör, eklenen tüm kaynak kodlarda başlık dosyasını otomatik olarak dâhil(include) eder. Bu yaklaşımda "Test.h", ana başlık dosyası, Classes klasöründeki tüm başlık dosyalarını içerdiği için(Şekil 3’deki gibi); eklenen kaynak dosyalarında(.cpp), başlık dosyasının(.h) da dahil edilmesine gerek yoktur. Hatta dahil edilmesi bazı durumlarda derleme sorunlarına yol açabilir. Bu durum Şekil 5’ de gösterilmiştir.

image.png
Şekil 5 - Classes Yaklaşımında Başlık Başvurusu


Son olarak, Classes klasörü içinde istenildiği kadar fiziksel alt dizin oluşturulabilir. Ancak bu klasör içindeki başlık dosyalarının dizinleri aynı şekilde Private klasörü içerisinde yer almalı ve kaynak dosyaları buralara yerleşmelidir. Şekil 6’ da bu yaklaşıma örnek verilmiştir.


image.png
Şekil 6 - Classes Yaklaşımında Kaynak Kodların Yerleşimi


1.6. Yapılardaki Harf Notasyonlarının Anlamları

U Notasyonu: UObject sınıfından kalıtım almış ve Unreal Garbage Collector tarafından tanınıp; gerektiğinde otomatik olarak temizlenebilen(garbage collected) sınıflardır. Esasen tüm Unreal nesnelerinin temel(base) sınıfıdır. Hazır olarak bulunan sınıflardan aktör bileşenleri(UActorComponent) “U” ön ekine sahip olup en çok karşılaşılan sınıflardır. Örnek olarak UActorComponent, UColliderComponent, USkeletalMeshComponent… verilebilir.

Not: UObject sınıflarının, GC tarafından temizlenmemesi isteniyorsa bunun bazı yöntemleri vardır. C++ doğal bir dil olarak GC içermez. UE4’de GC, Epic Games tarafından oluşturulmuştur.

A Notasyonu: AActor sınıfından kalıtım almış yani aktör olan tüm sınıflar için kullanılır. Aktörler de temelde UObject sınıfından kalıtım almıştır, fakat; özel olarak “A” ön eki ile isimlendirilmişlerdir. Örnek olarak AActor, APawn, ACharacter, AStaticMeshActor, ACableActor… verilebilir.

F Notasyonu: GC tarafından tanınmayan ve genellikle referans barındırmayıp(barındırabilir), veri sağlamak amacıyla oluşturulmuş tüm yapılardır. Daha genel bir ifade ile UObject olmayan tüm yapılardır ve genellikle struct tipindedirler. Örnek olarak FTransform, FVector, FRotator, FName, FString, FText, FHitInfo, FMatrix… verilebilir.

Not: C++’da struct ve class yapıları için; varsayılan erişim düzenleyicileri(access modifiers: public, protected, private) dışında önemli bir fark yoktur. C# gibi bir programlama dilinde ise struct değer, class ise referans olarak yorumlanırken; C++’ da böyle bir ayrım söz konusu değildir.

T Notasyonu: Tüm genelleyici/taslak(generic/templated) sınıflar için kullanılır. Örnek olarak TArray, TMap, TSubclassOf… verilebilir.



1.7. Kısaltmalar ve Notlar

Editör : Unreal Engine 4
GENERATED_UCLASS_BODY makrosu, 4.7 sürümü ile birlikte yerini GENERATED_BODY makrosuna bırakmıştır.
GC : Garbage Collector
UBT : Unreal Build Tool
UE4 : Unreal Engine 4
UHT : Unreal Header Tool




Büyük ihtimalle bir sonraki bölümde yer alacak konu örnek bir oyun projesi üzerinden yürütülecektir. Konunun içeriğine olmasa da uygulama alanına karar verilmesi açısından, örnek oyun tarzları hakkındaki görüşlerinizi bildirebilirsiniz. Lütfen yazının tamamını okumadan ya da C++ programlama konusu ile gerçekten ilgili değilseniz bu kararları etkilemeye çalışmayın. Bu yazı ile ilgili soru, görüş ve önerilerinizi ve bir sonraki yazının içeriği ile ilgili önerilerinizi de bu başlık altından iletebilirsiniz.
Cevapla
#2
Ellerine kollarına sağlık!
Özelden sorulan Unreal Engine soruları cevaplanmayacaktır.
Cevapla
#3
(29-09-2015, Saat: 00:24)Phyrexian Adlı Kullanıcıdan Alıntı:  Ellerine kollarına sağlık!

Teşekkürler. Tepkileri bekliyorum.
Cevapla
#4
Tepkileri mi bekliyorsun :)

Yazıyı görünce wtf dedim içimden(what the fall) :)

Eline sağlık,projem bitince buna başlayacağım :)
Ara
Cevapla
#5
(29-09-2015, Saat: 00:36)SoloWarrior Adlı Kullanıcıdan Alıntı:  Tepkileri mi bekliyorsun Smile
Yazıyı görünce wtf dedim içimden(what the fall) Smile
Eline sağlık,projem bitince buna başlayacağım Smile

Teşekkürler. Daha çok eksikleri nedir, yanlışları nedir, başka nelerden bahsetmeli, anlaşılmayan yerler nelerdir... gibi tepkilerden bahsetmiştim.
Cevapla
#6
Emeginize saglik
Cevapla
#7
Fotoğraflar görüntülenemiyor daha net anlayabilmemiz için yeniden düzenleyebilir misiniz iyi çalışmalar
Ara
Cevapla
 


Hızlı Menü:


Unreal Engine Türkiye

This forum is only for fans and support. It has nothing to do with Epic Games.

Bu site sadece fan ve destek amaçlıdır. Epic Games ile bir ilgisi yoktur.