Bölümü Ayarlama
Başlarken Fall Guys - Başlangıç Seti ada şablonundan yeni bir proje başlat. Bu başlangıç adasında gezinmen için hazır bir parkur bulunuyor ve bu eğitimde parkuru hareketle özelleştireceksin.
Hareket Eden Nesneleri Tanımlama
Nesneleri hareket ettirmeye başlamadan önce hareketli nesneyi tanımlaman gerekir. Bir nesneyi doğrudan hareket ettirmek için Verse cihazı kullanabilirsin ancak birden fazla nesneyi aynı anda hareket ettirmek istersen bu zor olabilir. Bunun yerine soyut bir moveable_prop sınıfı tanımlayacaksın. Bu, hareket ettirmek istediğin nesneyi ve hareketinin mantığını ve zamanlamasını özelleştirmek kullanacağın başka birkaç değeri içerir.
Hareketli nesneyi tanımlamak için aşağıdaki adımları izle:
Verse Gezgini ile
movable_propadında yeni bir Verse sınıfı oluştur. Bu bir cihaz değil Verse sınıfı olduğundan bu dosyayı Boş Oluştur ile oluştur. Ayrıca bu soyut sınıfla farklı türdeki hareketli nesnelerin alt sınıfını oluşturacağın için bu sınıfa<abstract>belirleyicisini ekle. Verse’te yeni bir sınıf nasıl oluşturulacağını öğrenmek için İlk Verse Programını Değiştir ve Çalıştır bölümüne bak.Verse# Defines a Creative prop that moves to a target or location using animation. movable_prop<public> := class<abstract>():{ /Fortnite.com/Devices } kullanılıyor,{ /Verse.org/Simulation } kullanılıyorve{ /UnrealEngine.com/Temporary/SpatialMath } kullanılıyoriçe aktarma yollarını dosyanın en üst kısmına ekle. Nesnelerinin hareket etmesini sağlayan matematiği yapabilmek için bu modülleri içe aktarman gerekir.Bu sınıftaki alanların her biri ayrıca
ToolTipiçerir. Düzenlenebilir alanlarına birToolTipmesajı eklemek, fareni UEFN’deki alanın üzerine getirdiğinde bir araç ipucu görüntülenmesini sağlar. Bu sınıfta kullanılan tüm araç ipuçlarına aşağıda yer verilmiştir. Bu araç ipuçlarını kopyalayıp yapıştırabilir veya kendi araç ipuçlarını tanımlayabilirsin.Verseusing { /Fortnite.com/Devices } using { /Verse.org/Simulation } using { /UnrealEngine.com/Temporary/SpatialMath } MoveDurationTip<localizes>:message = "The amount of time the prop takes to move to its destination." MoveEaseTypeTip<localizes>:message = "The animation easing applied to the movement." MoveEndDelayTip<localizes>:message = "The delay after the movement finishes." MoveOnceAndStopTip<localizes>:message = "Whether the RootProp should stop in place after it finishes moving." MoveStartDelayTip<localizes>:message = "The delay before the movement starts." MoveTargetsTip<localizes>:message = "The array of CreativeProp to move toward. These targets can be children of the RootProp."Her bir hareketli nesne için gerekli alanları tanımla.
movable_propsınıf tanımına aşağıdaki alanları ekle:RootPropadlı bir düzenlenebilircreative_prop. Bu, oyun sırasında hareket ettireceğin Kreatif nesnesidir.Verse# The Creative prop associated with this class. # This should be the root prop of the object you want to move. @editable {ToolTip := RootPropTip} RootProp:creative_prop = creative_prop{}MoveDurationadlı bir düzenlenebilirfloat. Nesnenin hedefine ulaşması için gerekli süredir.Verse# The duration in seconds it takes for the prop to move to its destination. @editable {ToolTip := MoveDurationTip} MoveDuration:float = 3.0MoveStartDelayadlı bir düzenlenebilirfloat. Nesne hareket etmeden önce geçen saniye cinsinden bekleme süresidir.Verse# The duration in seconds to wait before movement begins. @editable {ToolTip := MoveStartDelayTip} MoveStartDelay:float = 0.0MoveEndDelayadlı bir düzenlenebilirfloat. Nesne hareket ettikten sonra geçen saniye cinsinden bekleme süresidir.Verse# The duration in seconds to wait after movement ends. @editable {ToolTip := MoveEndDelayTip} MoveEndDelay:float = 0.0MoveOnceAndStopadlı bir düzenlenebilirlogic. Nesnenin yalnızca bir kez hareket edip etmeyeceğini veya hareket bittikten sonra hareketi tekrarlayıp tekrarlamayacağını kontrol eder.Verse# Whether the RootProp should stop in place when it finishes moving. @editable {ToolTip := MoveOnceAndStopTip} MoveOnceAndStop:logic = falseShouldResetadlı bir düzenlenebilirlogic. Nesnenin hareketi bitirdikten sonra orijinal konumuna sıfırlanıp sıfırlanmayacağını kontrol eder.Verse# Whether the RootProp should reset back to the starting position when it # finishes moving. @editable {ToolTip := ShouldResetTip} ShouldReset:logic = falseStartingTransformadlı bir dönüştürme değişkeni.RootPropharekete başladığında meydana gelen dönüşümdür.Verse# The starting transform of the RootProp. var StartingTransform:transform = transform{}
Son sınıf tanımın şu şekilde görünmelidir:
Verseusing { /Fortnite.com/Devices } using { /Fortnite.com/Devices/CreativeAnimation } using { /Verse.org/Simulation } using { /UnrealEngine.com/Temporary/SpatialMath } MoveDurationTip<localizes>:message = "The amount of time in seconds the prop takes to move to its destination." MoveEaseTypeTip<localizes>:message = "The animation easing applied to the movement." MoveEndDelayTip<localizes>:message = "The delay after the movement finishes." MoveOnceAndStopTip<localizes>:message = "Whether the RootProp should stop in place after it finishes moving." MoveStartDelayTip<localizes>:message = "The delay before the movement starts."Nesnen hareket etmeden önce nereden hareket ettiğini bilmesi gerekir. Bunu yapmak için, hareketten önce
StartingTransformöğesini ayarlamak için yeni bir fonksiyon tanımlarsın:movable_propsınıf tanımına yeni birSetStartingTransform()metodu ekle.SetStartingTransform()içerisinde,StartingTransformöğesiniGetTransform()ileRootPropdönüşümüne ayarla.Tamamlanmış
SetStartingTransform()fonksiyonun şu şekilde görünmelidir:Verse# Sets the StartingTransform to the current transform of the RootProp. SetStartingTransform():void= set StartingTransform = RootProp.GetTransform()
Nesneni hareket ettirmeye başlamak için yeni bir
Move()fonksiyonu tanımlarsın:movable_propsınıf tanımına yeni birMove()metodu ekle.Bu fonksiyonun asenkron bir şekilde çalışabilmesi için ona
<suspends>değiştiricisini ekle. Bu değiştirici, bu fonksiyonun temel sınıf sürümü olup kullanılmayacağından yalnızca hemenreturnuygulanır.Tamamlanmış
Move()fonksiyonun şu şekilde görünmelidir:Verse# Move the RootProp to its target. This is the base class # version of this function and should not be used. Move()<suspends>:void= return
Nesneni hareketi bittiğinde sıfırlamak istersen başlangıç konumuna geri ışınlaman gerekir. Bunu yapabilmek için
movable_propsınıf tanımına yeni birReset()metodu ekle:Sıfırlama işlemi başarısız olursa geri dönmesine izin vermek için bu fonksiyona
<decides><transacts>değiştiricilerini ekle. Bu durum, nesnen oyun sırasında atılırsa olabilir.Reset()içerisindeRootPropöğesiniTeleportTo[]kullanarakStartingTransformhedefine geri ışınla.Tamamlanmış
Reset()fonksiyonun şu şekilde görünmelidir:Verse# Reset the RootProp by teleporting it back to its Starting Transform. Reset()<decides><transacts>:void= RootProp.TeleportTo[StartingTransform]
Birçok fonksiyonu tanımladın ve şimdi hepsini birbirine bağlama zamanı. Farklı tüm hareket fonksiyonlarını yönetmek için
movable_propsınıf tanımına yeni birManageMovement()metodu ekle. Bu fonksiyonun asenkron bir şekilde çalışmasına izin vermek için<suspends>değiştiricisini ekle.Verse# Loops moving the RootProp to its target by calling Move(), and handles # any logic when the movement begins and ends. ManageMovement()<suspends>:void=ManageMovement()içerisinde hareketi yöneten birloopifadesi oluştur. Döngünün içerisinde, önceMoveStartDelaysaniye kadarSleep(), ardındanMove()işlevini çağır.Verse# Loops moving the RootProp to its target by calling Move(), and handles # any logic when the movement begins and ends. ManageMovement()<suspends>:void= loop: Sleep(MoveStartDelay) Move()Platformun hareket etmeyi bitirdiğinde hareket etmeye devam etmesi, konumunu sıfırlaması veya olduğu yerde durması gerekir. Durdurabilmek için bir
ififadesindeMoveOnceAndStopdeğerinin true olup olmadığını kontrol et. Değer true ise,breakile döngüden çık. Hareket durduktan sonraMoveEndDelaysaniye kadarSleep()uygula. Son olarak, başka birififadesindeShouldResetdeğerinin true olup olmadığını kontrol et ve değer true iseReset[]fonksiyonunu çağır. TamamlanmışManageMovement()fonksiyonun şu şekilde görünmelidir:Verse# Loops moving the RootProp to its target by calling Move(), and handles # any logic when the movement begins and ends. ManageMovement()<suspends>:void= loop: Sleep(MoveStartDelay) Move() # If the prop should only move once and stop, then exit the loop. if:Bu sınıfta
OnBegin()fonksiyonu olmadığından platformunu hareket ettirmeye başlamak üzere diğer sınıflara dairManageMovement()çağrısı yapmak için bir yönteme ihtiyacın var.movable_propsınıf tanımına yeni birSetup()fonksiyonu ekle.Setup()içerisindeyken ilk önceSetStartingTransform()çağrısı yap, ardından platformunun çalışması için birManageMovement()fonksiyonu oluştur. TamamlanmışSetup()fonksiyonun şu şekilde görünmelidir:Verse# Set the StartingTransform, then begin movement by spawning ManageMovement. Setup():void= SetStartingTransform() spawn{ManageMovement()}
Sıradaki
Soyut sınıfın tamamlandığında bir sonraki adımda nesneleri animasyonla nasıl hareket ettireceğini öğreneceksin!
2. Animasyonları Olan Hareketli Nesneler
Kendi animasyonlarını oluşturmak ve nesnelerini hareket ettirmek için bu güçlü aracı nasıl kullanacağını öğren!
Tam Kod
Bu bölümde oluşturulan kodun tamamı şöyledir:
movable_prop.verse
using { /Fortnite.com/Devices }
using { /Fortnite.com/Devices/CreativeAnimation }
using { /Verse.org/Simulation }
using { /UnrealEngine.com/Temporary/SpatialMath }
MoveDurationTip<localizes>:message = "The amount of time in seconds the prop takes to move to its destination."
MoveEaseTypeTip<localizes>:message = "The animation easing applied to the movement."
MoveEndDelayTip<localizes>:message = "The delay after the movement finishes."
MoveOnceAndStopTip<localizes>:message = "Whether the RootProp should stop in place after it finishes moving."
MoveStartDelayTip<localizes>:message = "The delay before the movement starts."