Bu sayfa, Unity kullanıcıları için Unreal Engine (UE) oynanış programlama kavramlarını açıklamaktadır. Aşağıdaki açıklamalar Unity C# bilen ve UE C++ ve Blueprint öğrenmek isteyen kişilere yöneliktir.
Aşağıdaki örnekler Unity C#’da yaygın bazı oynanış programı kullanım örneklerini ve bunlarla aynı işlevselliği UE’ye uygulama ile ilgili örnekleri kapsamaktadır.
"GameObject"i Örneklendirme/Aktörün Çıkmasını Sağlama
Unity’de objelerin yeni örneklerini oluşturmak için Instantiate fonksiyonunu kullanırsınız. Bu fonksiyon herhangi bir UnityEngine.Object türünü (GameObject, MonoBehaviour vb.) alıp onun bir kopyasını oluşturur.
public GameObject EnemyPrefab;
public Vector3 SpawnPosition;
public Quaternion SpawnRotation;
void Start()
{
GameObject NewGO = (GameObject)Instantiate(EnemyPrefab, SpawnPosition, SpawnRotation);
NewGO.name = "MyNewGameObject";
}UE’de objeleri örneklemek için iki farklı fonksiyon vardır:
NewObjectfonksiyonu yeniUObjecttürleri oluşturur.SpawnActorfonksiyonuAActortürlerini üretir.
"UObject"ler ve "NewObject"
UE’de UObject ile alt sınıf oluşturma, Unity’de ScriptableObject ile alt sınıf oluşturmaya benzerdir. Bu alt sınıflar, dünyada çıkması gerekmeyen veya aktörlerde olduğu gibi eklenmiş bileşenlere sahip olan oynanış sınıfları için yararlıdır.
Unity’de kendi ScriptableObject alt sınıfınızı oluşturduysanız bunu aşağıdaki gibi örnekleyebilirsiniz:
MyScriptableObject NewSO = ScriptableObject.CreateInstance<MyScriptableObject>();UE’de kendi UObject alt sınıfınızı oluşturduysanız bunu aşağıdaki gibi örnekleyebilirsiniz:
UMyObject* NewObj = NewObject<UMyObject>();"AActor"ler ve "SpawnActor"
Aktörleri bir dünya (C++’da UWorld) objesi üzerinde SpawnActor metodu kullanarak ortaya çıkarabilirsiniz. Bazı UObject’ler ve tüm aktörler, dünya objesini almak için bir GetWorld metodu sağlar.
Aşağıdaki örnekte, Unity’nin Örnekleme metodunun işlevselliğini taklit etmek için bu metotları mevcut bir aktörün çıkma parametreleriyle kullanıyoruz.
Örnek
Aşağıda AActor alt sınıfının örneği olan AMyActor yer almaktadır. Varsayılan oluşturucu int32 ve USphereComponent*’ı başlatır.
CreateDefaultSubobject fonksiyonunun nasıl kullanıldığına dikkat edin. Bu fonksiyon bileşenler oluşturur ve bunlara varsayılan özellikler atar. Bu fonksiyonla oluşturulan alt objeler bir varsayılan şablon işlevi görür, böylece bunları bir alt sınıfta veya Blueprint’te değiştirebilirsiniz.
UCLASS()
class AMyActor : public AActor
{
GENERATED_BODY()
UPROPERTY()
int32 MyIntProp;
UPROPERTY()
USphereComponent* MyCollisionComp;
Bu, tüm üye değişkenlerini, UPROPERTY’leri ve bileşenleri içeren bir AMyActor klonu oluşturur.
AMyActor* CreateCloneOfMyActor(AMyActor* ExistingActor, FVector SpawnLocation, FRotator SpawnRotation)
{
UWorld* World = ExistingActor->GetWorld();
FActorSpawnParameters SpawnParams;
SpawnParams.Template = ExistingActor;
World->SpawnActor<AMyActor>(ExistingActor->GetClass(), SpawnLocation, SpawnRotation, SpawnParams);
}Bir Türden Diğerine Dönüştürme
Bu şekilde, sahip olduğumuzu bildiğimiz bir bileşeni alıp belirli bir türe dönüştürür ve koşullu olarak bir şey yaparız.
Unity
Collider collider = gameObject.GetComponent<Collider>;
SphereCollider sphereCollider = collider as SphereCollider;
if (sphereCollider != null)
{
// ...
}UE C++
UPrimitiveComponent* Primitive = MyActor->GetComponentByClass(UPrimitiveComponent::StaticClass());
USphereComponent* SphereCollider = Cast<USphereComponent>(Primitive);
if (SphereCollider != nullptr)
{
// ...
}Şema
Şuraya Yansıt düğümünü kullanarak Blueprint’te yansıtabilirsiniz. Daha fazla bilgi için Yansıtma Hızlı Başlangıç Kılavuzu bölümüne bakın.
"GameObject"i/Aktörü Yok Etme
"GameObject"i/Aktörü Yok Etme (1 Saniye Gecikmeyle)
"GameObject"leri/Aktörleri Devre Dışı Bırakma
Unity C# C# | UE C++ C++ | Blueprint |
Bir Bileşenden "GameObject"e/Aktöre Erişme
Unity C# C++ | UE C++ C++ | Blueprint |
"GameObject"ten/Aktörden Bir Bileşene Erişme
Unity
MyComponent MyComp = gameObject.GetComponent<MyComponent>();UE C++
UMyComponent* MyComp = MyActor->FindComponentByClass<UMyComponent>();Şema
"GameObject"leri/Aktörleri Bulma
Unity
// Find GameObject by name
GameObject MyGO = GameObject.Find("MyNamedGameObject");
// Find Objects by type
MyComponent[] Components = Object.FindObjectsOfType(typeof(MyComponent)) as MyComponent[];
foreach (MyComponent Component in Components)
{
// ...
}
UE C++
// Find UObjects by type
for (TObjectIterator<UMyObject> It; It; ++it)
{
UMyObject* MyObject = *It;
// ...
}
// Find Actor by name (also works on UObjects)
AActor* MyActor = FindObject<AActor>(nullptr, TEXT("MyNamedActor"));
Şema
GameObject’lere/Aktörlere Etiket Ekleme
Unity
MyGameObject.tag = "MyTag";UE C++
// Actors can have multiple tags
MyActor.Tags.AddUnique(TEXT("MyTag"));Şema
MonoBehaviour’lara/ActorComponent’lara Etiket Ekleme
Unity
// This changes the tag on the GameObject it is attached to
MyComponent.tag = "MyTag";UE C++
// Components have their own array of tags
MyComponent.ComponentTags.AddUnique(TEXT("MyTag"));GameObject’ler/Aktörler ve MonoBehaviour’lar/ActorComponent’lardaki Etiketleri Karşılaştırma
Unity
if (MyGameObject.CompareTag("MyTag"))
{
// ...
}
// Checks the tag on the GameObject it is attached to
if (MyComponent.CompareTag("MyTag"))
{
// ...
}UE C++
// Checks if an Actor has this tag
if (MyActor->ActorHasTag(FName(TEXT("MyTag"))))
{
// ...
}Şema
UE C++
// Checks if an ActorComponent has this tag
if (MyComponent->ComponentHasTag(FName(TEXT("MyTag"))))
{
// ...
}Şema
Fizik: RigidBody ile Primitif Bileşen Karşılaştırması
Unity’de herhangi bir GameObject’e fizik özellikleri vermek için bir RigidBody bileşeni eklersiniz.
UE’de herhangi bir primitif bileşen (C++’da UPrimitiveComponent) bir fiziksel objeyi temsil edebilir. Bazı yaygın primitif bileşenler şunlardır:
Şekil Bileşenleri (
USphereComponent,UCapsuleComponentvb.)Statik Örgü Bileşenleri
İskelet Örgü Bileşenleri
UE, çarpışma ve görselleştirme sorumluluklarının farklı bileşenlere ayrıldığı Unity’den farklı olarak, “potansiyel olarak fiziksel” ve “potansiyel olarak görünür” kavramlarını tek bir primitif bileşende birleştirir. Dünyada herhangi bir geometriye sahip olan, fiziksel olarak işlenebilen veya etkileşime girilebilen her bileşen UPrimitiveComponent’ın bir alt sınıfıdır.
UE’deki çarpışma kanalları, Unity’deki katmanların eş değeridir. Daha fazla bilgi edinmek için Çarpışma Filtreleme sayfasına göz atın.
RayCast ile RayTrace Karşılaştırması
Unity
GameObject FindGOCameraIsLookingAt()
{
Vector3 Start = Camera.main.transform.position;
Vector3 Direction = Camera.main.transform.forward;
float Distance = 100.0f;
int LayerBitMask = 1 << LayerMask.NameToLayer("Pawn");
RaycastHit Hit;
bool bHit = Physics.Raycast(Start, Direction, out Hit, Distance, LayerBitMask);
UE C++
APawn* AMyPlayerController::FindPawnCameraIsLookingAt()
{
// You can use this to customize various properties about the trace
FCollisionQueryParams Params;
// Ignore the player's pawn
Params.AddIgnoredActor(GetPawn());
// The hit result gets populated by the line trace
FHitResult Hit;
Şema
Tetikleyici Etki Aktörleri
Unity
public class MyComponent : MonoBehaviour
{
void Start()
{
collider.isTrigger = true;
}
void OnTriggerEnter(Collider Other)
{
// ...
}
UE C++
UCLASS()
class AMyActor : public AActor
{
GENERATED_BODY()
// My trigger component
UPROPERTY()
UPrimitiveComponent* Trigger;
AMyActor()
Şema
Çarpışma yanıtlarını ayarlama hakkında daha fazla bilgi edinmek için Çarpışma sayfasına göz atın.
Kinematik "Rigidbody"ler
Unity
public class MyComponent : MonoBehaviour
{
void Start()
{
rigidbody.isKinematic = true;
rigidbody.velocity = transform.forward * 10.0f;
}
}UE C++
UCLASS()
class AMyActor : public AActor
{
GENERATED_BODY()
UPROPERTY()
UPrimitiveComponent* PhysicalComp;
AMyActor()
{
Girdi Olayları
Unity
public class MyPlayerController : MonoBehaviour
{
void Update()
{
if (Input.GetButtonDown("Fire"))
{
// ...
}
float Horiz = Input.GetAxis("Horizontal");
float Vert = Input.GetAxis("Vertical");
UE C++
UCLASS()
class AMyPlayerController : public APlayerController
{
GENERATED_BODY()
void SetupInputComponent()
{
Super::SetupInputComponent();
InputComponent->BindAction("Fire", IE_Pressed, this, &AMyPlayerController::HandleFireInputEvent);
Şema
Proje ayarlarınızdaki girdi özellikleriniz şöyle görünebilir:
UE projenizde girdiyi nasıl ayarlayacağınız hakkında daha fazla bilgi edinmek için Girdi sayfasına göz atın.
Daha Fazla Bilgi
Yukarıdaki kavramlarla ilgili daha fazla bilgi edinmek için aşağıdaki bölümleri incelemenizi öneririz:
Oynanış Altyapısı: Oyun modu, oyuncu durumu, denetleyiciler, piyonlar ve kameralar gibi temel oyun sistemlerini kapsar.
Oynanış Mimarisi: Oynanış sınıfları oluşturma ve uygulama için referanstır.
Oynanış Eğitimleri: Yaygın oynanış unsurlarının yeniden oluşturulmasıyla ilgili eğitimler.