İlk Minik Uygulama
Selamlar Herkese,
Allah sizi inandırsın bugün küçücük de olsa gerçek bir C++ uygulaması yapacak ve ekranda oynar vaziyette çıktısını göreceğiz. Resmi dökümantasyondaki QuickStart örneğini biraz da kendi bilgim ile zenginleştirerek bu mini uygulamayı elde ettim. Umarım beğenirsiniz;
e hadi başlayalım :)
1-Adım:
yeni proje oluştururken C++ tabına geçin. Basic Code template ini seçin. "with starter content" seçeneği aktif olsun; çünkü örneğimizde starter content e ihtiyaç duyacağız; sonra proje adını girin ve Create Protect deyin !
adından unreal editör yeni projemizi oluşturacak ve C++ templeti seçtiğmiz için otomatik olarak Visual studio açılacak ve yarattığımız projenin solution u yüklenecektir. (Bu başta biraz zaman alabiliyor.)
2 - Adım:
burada projemize yeni bir C++ sınıfı ekleyeceğiz:
file menüsü içinde New C++ Class komutu ile yeni sınıf yaratmaya başlayabiliriz:
Yeni
C++ class dediğimiz anda bizden bu sınıfın tipini seçmemiz isteyen "
Choose Parent Class" penceresi açılacaktır:
burada Unreal Engine in oyun için temel class ları listeleniyor; şayet istersek burada tüm class ları listeleyerek ilk başta görünmeyen sınıflardan birini de seçebiliriz; elbette yine bizim daha önce yaratmış olduğumuz bir sınıf da olabilir bu sınıf.
Şimdilik Unreal Engine level içindeki en temel class tipi olna Actor sınıfını kullanacağız. Actor sınıfını seçtikten sonra yeni actor yartma penceresi gelecek, ismine FloatingActor diyelim;
aşağı yukarı sürekli bir döngüde salınım yapan bir obje yaratacağımızdan adına FloatingActor dedik.ve ardından "Create Class" buttonuna basalım.
tam bu noktada bilgisayarımıza yüklü olan Visual Studio açılır; ve içinde yeni bir C++ sınıfı hazır bir biçimde yaratılır ve solution a eklenir; adı da bizim yukarıda vermiş olduğumuz FloatingActor.cpp dir.
3 - Adım:
şimdi biraz C++ kodlaması yapmaya başlayabiliriz; Visual Studio nun Solution Exploere panelinden yeni eklediğimiz class dosyalarını bulalım; örneğimizde bunlar malum FloatingActor.cpp ve FloatingActor.h dosyalarıdır.
Şimdi bir değişken bir de fonksyon eklemesi yapacağız. Ekleyeceğimiz değişken Actor ün ömrü boyunca geçirdiği süreyi tutacak;
bunun için önce FloatingActor.h içine en sona float RunningTime; kodunu ekleyelim; bu değişkenin değerini her bir zaman birimi adımında sürekli artıracağız; böylece her hangi bir zamanda Actor ün ne kadar yaşamış olduğunu ölçebileceğiz. Bu sürekli artımı da malumunuz Actor ün Tick fonksyonu içinde yapacağız. Bu fonksyon aksi belirtilmemişse sürekli ard arda çağrılır; ve her çağrılmada geçen "birim zamanı" parametre alarak alır, böylece her bir mini zaman adımında (Tick) yapılmasını istediklerimizi kodlayabilme imkanı bize verir. Böylece oyun içindeki her objenin canlı akışını sağlayabiliyoruz; dolayısı ile bu AFloatingActor::Tick fonksyonunu da FloatingActor.cpp dosyasında yine en sona ekleyelim, ve içine aşağıdaki kodları yazalım:
FVector NewLocation = GetActorLocation();
float DeltaHeight = (FMath::Sin(RunningTime + DeltaTime) - FMath::Sin(RunningTime));
NewLocation.Z += DeltaHeight * 20.0f; //Scale our height by a factor of 20
RunningTime += DeltaTime;
SetActorLocation(NewLocation);
yukarıdaki kod FloatingActor ün yumuşak bir şekilde yukarı aşağı salınımını sağlayacaktır; yarattığımız RunningTime değişkeninin kullanımı hareketlerimizi belli bir zamanda takip edebilmek içindir.
Şimdi derleme aşamasına geçelim, Solution üzerindeki projemiz üzerine (tüm solution a değil) sağ tıklayıp Build diyelim.
veya Unreal Editör içindeki Compile buttonuna tıklayalım:
Derleme işlemi succsess ise Editör yeni ve son hali ile otomatik olarak yüklenecektir.
Kodun tamamı aşağıdadır:
FloatingActor.h
// Copyright 1998-2017 Epic Games, Inc. All Rights Reserved.
#pragma once
#include "GameFramework/Actor.h"
#include "FloatingActor.generated.h"
UCLASS()
class QUICKSTART_API AFloatingActor : public AActor
{
GENERATED_BODY()
public:
// Sets default values for this actor's properties
AFloatingActor();
protected:
// Called when the game starts or when spawned
virtual void BeginPlay() override;
public:
// Called every frame
virtual void Tick( float DeltaSeconds ) override;
float RunningTime;
};
FloatingActor.cpp
// Copyright 1998-2017 Epic Games, Inc. All Rights Reserved.
#include "QuickStart.h"
#include "FloatingActor.h"
// Sets default values
AFloatingActor::AFloatingActor()
{
// 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;
}
// Called when the game starts or when spawned
void AFloatingActor::BeginPlay()
{
Super::BeginPlay();
}
// Called every frame
void AFloatingActor::Tick( float DeltaTime )
{
Super::Tick( DeltaTime );
FVector NewLocation = GetActorLocation();
float DeltaHeight = (FMath::Sin(RunningTime + DeltaTime) - FMath::Sin(RunningTime));
NewLocation.Z += DeltaHeight * 20.0f; //Scale our height by a factor of 20
RunningTime += DeltaTime;
SetActorLocation(NewLocation);
}
4 - Adım:
şimdi Unreal
Editör içinde
Content Browser penceresini açtığınızda "
C++ Classess" isimli folder in içinde bizim ürettiğimiz proje ile aynı isimde bir folder daha göreceksiniz, biz buna başta "
QuickStart" demiş idik, folder ismi de dolayısı ile bu olacaktır; onun da içine girdiğimizde az önce yarattığımız class olan
FloatingActor ümüzü ikon olarak görebiliyoruz:
artık
FloatingActor ümüzü
level içine doğrudan sürükleyip bırakabiliriz; hatırlayın
Actor ler level içine konumlandırılabilir idi; bunu yaptığımızda da artık editör içindeki
World Outliner penceresinde de görünür ve seçili durumdadır; ve ismi de muhtemelen: "
FloatingActor1" dir; ve seçili iken
ona ait diğer
component ler ve diğer özellikler
Details Panel içinde görülebilir durumdadır:
burada şunu da eklemek istiyorum; dikkat ettiniz mi derleme sonrası
Content Browser içinde görünmeye başlayan yeni Actor ümüzün ismi
FloatingActor iken, onu level içine sürüklediğimizde
Word Outliner penceresi içinde
FloatingActor1 veya
FloatingActor2 veya
3.. gibi bi isim aldı;
peki neden?
çünkü Content Browser içinde görünen şey bir Sınıf (class) tipi iken, level içinde görünen o sınıfan türetilmiş bir nesne (object) dir. Tıpkı kodlamada bir sınıftan değişkenler yaratır gibi Content Browser içindeki bir tipi (Type) tutup level içine her sürüklediğinizde o sınıftan bir nesne kopyası yaratılır ve otomatik olarak en sonu sınıf adı + 1, 2, 3 vs.. şeklinde isimlendirilir.
Yani Level içindeki herşey belli sınıfların nesneleridir.
İyi güzel de bir sorun var,,
Actor ümüz
level içinde görünmüyor; bunun nedeni kendilerinin henüz bir görsel öğeye sahip olmamasıdır; dilerseniz hemen ona bir görünüm verelim, bunun da yolu
bir görünüme sahip olan bir nesneyi ona Attach etmektir; bunun için onu önce
World Outliner penceresinden kensini seçelim, arından
Details Panel den
Add Component deyip bir görsel şekil belirtelim;
burada bir
static mesh de belirtebiliriz, ancak ilk örneğimizin daha basit olması açısından primitif şekillerden birini seçelim, biz örneğimizde
koni kullanacağız; böylece
actor ümüz görsel anlamda kendisini koni biçiminde ifade edecek:
şimdi artık
actor ümüz hazır, onu istediğimiz gibi level içine sürükleyip bırakabilir ve konumlandırabiliriz; konumlandırma işini Level içinden mouse yordamı ile yapabileceğimiz gibi daha kesin değerler için onu önce yine
Word Outliner penceresinden de seçip sonra da
Details Panel in transform kısmından
Lokasyon değerleri verebiliriz;
isterseniz başlangıç olarak actorümüzü level e
X: -200 ,
Z: 200 olarak set edelim; bu onu sahnede uygun yükseklikte görünür yapacaktır.
şimdi
play buttonuna basıp durumu görelim :)
elbette başka
componentler de ekleyebiliriz, mesela bir particle sistemi ekleyebiliriz; eklediğimiz her component Actor ümüze başka özellikler katacaktır.
Son olarak
UPROPERTY makrosu ile etiketlediğimiz değişkenlerin verdiğimiz parametrelere göre editör özelliklerinde çıkmasını sağlayabildiğimizi de yineleyelim.
ve şimdi artık işin en zevkli kısmı olan editör içinde yarattığımız
Actor e ait objele(ler) yaratabiliriz; istediğimiz sayıda... :)
benzer bir uygulamayı yaparak ben şöyle bir çıktı elde ettim:
bu basit
Actor yaratma makalesi bi çok konuda işin mantıksal temeli olabilir.
Daha karmaşık ve de güzel örneklerde görüşmek üzere şimdilik hoşça kalın..
1 yorum:
Emperor Casino - Shootercasino
Emperor Casino is a https://oncasinos.info/ new online casino offering games for the most popular casino oklahomacasinoguru.com games. This apr casino is one of the most wooricasinos.info comprehensive online https://shootercasino.com/emperor-casino/ casinos in the world. The
Yorum Gönder