Konuyu Oyla:
  • Derecelendirme: 0/5 - 0 oy
  • 1
  • 2
  • 3
  • 4
  • 5
UE4 C++ Actor I
#1

Bu yazıda UE4 Actor'ün C++ ile nasıl tanımlanacağı konu edilmiştir. UE4 C++ ile programlamaya yeni başlayanlar için; "Actor" ile basit transformasyon işlemlerinin nasıl yapılacağı örneklendirilmiştir.

Başlamadan önce UE4 C++ Giriş başlıklı bu yazının okunması tavsiye edilir.

Örnek senaryoda oyuncudan bağımsız bir "Actor", sahne içinde, Z(Yaw) ekseninde, saniyede 360 derece dönecektir.

İlk olarak "File" menüsü altından "Add New C++ Class" seçilmeli ve "Parent Class" olarak "Actor" seçilmelidir. Sınıfa "CubeActor" adı verilip "Create Class" seçeneğine tıklanmalıdır.


UE4, aşağıdaki kodu otomatik olarak oluşturacaktır (Açıklama satırları temizlenmiştir).

9r0k8g.png

Blueprint deneyimi olanlar, oluşturulan "Actor" fonksiyonlarını tanıyacaktır. Yine de kısaca değinmek gerekirse;

ACubeActor()
Kurucu(constructor) metottur. Tüm varsayılan(default) değerler burada verilir. Blueprint üzerinde "Construction Script"e benzese de "Construction Script"in C++ eşdeğeri "OnConstruction()" metodudur.

BeginPlay()
"Actor"ün tamamen hazır hale geldikten sonra, sahne üzerinde çalıştırdığı ilk metottur. "Constructor", "OnConstruction()", "PreInitProperties()", "PostInitProperties()"...gibi bütün önyükleme metotlarından sonra ve onlar gibi yalnızca 1 kez çağrılır/çalıştırılır.

Tick(float DeltaSeconds)
Her "frame"de çağrılan metottur*. "DeltaSeconds" bir önceki "frame" ile bu "frame" arasında geçen zamanı saniye cinsinden verir.


"Actor" için tasarlanan senaryoda, saniyede 360 derece döndürme işlemi tanımlanmıştı. Döndürme işlemi süreklilik arz ettiğinden, saniye başına dönme miktarı "Tick" metodu içinde yazılır. Bu işlem aşağıdaki şekilde gerçekleştirilir.

154zgqb.png

AddActorWorldRotation(FRotator DeltaRotation, ...)
Bu metot "Actor" sınıfının bir üyesidir ve "Actor"ün "World Rotation"ına "Rotation" ekler.

FRotator(float InPitch, float InYaw, float InRoll)
Bu yapı(struct) tipi 3 boyutlu "Rotation"ı temsilen kullanılır. "Pitch", y ekseni üzerinde (dalış/tırmanış, aşağı/yukarı); "Yaw", z ekseni üzerinde (sola/sağa), "Roll" ise x ekseni üzerinde (yuvarlanma) açısal konumunu belirtir.

Örnek üzerinde 360 değeri ile "DeltaSeconds" değeri çarpılmış, elde edilen sonuç "Yaw" olarak verilmiştir. Oluşan "FRotator", "Actor Rotation"ına eklenmiştir. Burada basitçe anlatmak gerekirse, bu işlemin çalıştığı an, oyun 30 FPS çizim yapıyorsa; "DeltaSeonds = 1 / 30 = 0.0333... değerini alır, 60 FPS ise bunun yarısı kadar değer alır. Ancak "frame" sayısı, sistem performansı ne olursa olsun; bu işlem, "Actor"ün saniyede 360 derece dönmesini garanti eder.

Kod, doğru bir biçimde yazıldığında, derlenmelidir. Eğer UE4 Editör kapatılmışsa, "Visual Studio" üzerinden derlenmeli(Build) ve tekrar başlatılmalıdır(Run). Editör kapatılmamışsa, UE4 Editör Araç Kutusu(Toolbar) üzerinde "Compile" seçilmelidir.


Derleme işlemi tamamlandığında, "Content Browser" üzerinde "C++ Classes" klasörü altında "CubeActor" sahneye sürükle ve bırak yöntemi ile atıldığında, sahnede gözükmese de bir örneği oluşacaktır. "World Outliner" üzerinde "CubeActorX" olarak görülebilir.

mvrdee.png

"Actor"ün sahnede gözükmeme sebebi, herhangi bir "Mesh" içermemesidir. Üstelik, seçildiğinde; taşıma, döndürme ve boyutlandırma gizmoları da görünmez. Bunun nedeni de herhangi bir "Scene" özelliği içermemesi yani transformasyonunun(pozisyon, dönme, ölçekleme) bulunmamasıdır. Bu durum C++ üzerinde, "Constructor"da varsayılan bir "StaticMeshComponent", "RootComponent" olarak eklenip çözülebilir, ancak; bu durum başka bazı detaylar barındırdığından başka türlü çözülecektir.


Sahne üzerine atılan "CubeActorX" örneği silinmeli ve "ContentBrowser" üzerinde "CubeActor" sınıfına sağ tıklanılarak, "Create Blueprint class based on CubeActor" seçeneği seçilmelidir. Böylece C++ "CubeActor" sınıfından kalıtım almış bir Blueprint oluşturulmuş olur.

2h4j40o.png


Blueprint Editörü açıldığında "AddComponent" menüsü altından "StaticMesh" seçilmelidir. Yeni oluşturulan "Static Mesh Component"e "Static Mesh Content" atamak gerekir. Proje yeni oluşturulduğu için herhangi bir "Static Mesh Content" bulundurmuyorsa, bu örnekte yapıldığı gibi "Content Browser" üzerinde "View Engine Content" seçili hale getirilip, "Engine" içeriği kullanılabilir. Bu örnekte bir küp modeli seçilmiştir.

140mf4y.png

Oluşturulan Blueprint derlenip(Compile), kaydedilir(Save).


Son olarak yeni oluşturulan Blueprint sahneye atılır ve oyun başlatılır. Böylece sahnede dönmekte olan bir küp elde edilir.

zvqtjb.png


Ne Elde Edildi?

Şimdilik, Blueprint örneği de oluşturulduğundan yapılan işlemler anlamsız gibi gelebilir, ancak; böyle bile olsa, Blueprintler son sınıf örneği oluşturmada (Prefab mantığı gibi), bu şekilde sıklıkla kullanılır. Birçok karmaşık ve ağır işlemler gerektiren bölümlerin C++ üzerinde kodlanıp, tasarımcılar için esnek bir süreç oluşturmada oldukça işe yarardır. Üstelik tasarım ve programlama katmanları bu şekilde birbirinden rahatlıkla ayrılabilir. Bu süreçten sonra, programcı "CubeActor" kodunu geliştirirken; tasarımcı, Blueprint üzerinde çalışmaya devam edebilir.


Not: UET, örnek projenin adıdır ve UET.h, "Game" modülünün ana başlık dosyasıdır.
Not: Kod örneklerinde altı çizilmiş, hatalı gibi gözüken yerler; "VC++ Intellisense" gecikmesinden kaynaklanmaktadır. Tüm kodlar derlenip, çalıştırılmış, test edilmiştir.
Not: Editör üzerinde yapılan ilk derleme biraz uzun sürebilir ancak sonrakiler daha hızlı derlenecektir.
Cevapla
 


Konu ile Alakalı Benzer Konular
Konular Yazar Yorumlar Okunma Son Yorum
  Kamera ve Actor Teleport OldNoob 1 83 10-10-2019, Saat: 11:05
Son Yorum: cahitburak

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.