Bazen platform oyunlarında boyutları değişen engellerle karşılaşırsın. Bunlar, belirli bir eksen boyunca boyutları büyüyüp küçülen, uzayıp kısalan platformlar olabilir. Bir objenin boyutlarının bu şekilde değiştirilmesine ölçeğinin değiştirilmesi denir.
Bir objenin ölçeği, her boyutunun kendisine göre hangi değerle çarpılacağını gösterir. Normalde objelerin ölçeği {X := 1.0, Y := 1.0, Z := 1.0} şeklindedir. Bir obje ölçeğinin Z değerini iki katına çıkarırsan obje iki kat daha uzun olur. Uzunluğu yarıya düşürürsen yarısı kadar olur.
Ölçek, dönüşüm bulmacasının son kısmıdır. Bu bölümde farklı boyutlarda büyüyüp küçülen nesneler oluşturmak için ölçeği değiştirmeyi öğreneceksin.
Ölçeklenen Nesneler Yapma
Nesnelerinin ölçeklenmesini sağlayan kodu oluşturmak için şu adımları izle:
-
Verse Gezgini ile
movable_propöğesinden devralınanscaling_propadında yeni bir Verse sınıfı oluştur. Özelliklerini UEFN’de kullanıma açmak için bu sınıfa<concrete>ekle.# Belirli bir ölçeğe veya bir Kreatif nesnesi ölçeğine göre ölçeklenen bir nesne. scaling_prop<public> := class<concrete>(movable_prop): -
using { /Fortnite.com/Devices/CreativeAnimation }veusing { /UnrealEngine.com/Temporary/SpatialMath }ifadelerini dosyanın üst kısmına ekleyerek bu modülleri içe aktar. Nesnene animasyon uygulamak için bunlara ihtiyacın var. Ayrıca bu bölümde kullanılan araç ipuçlarına burada yer verilmiştir.using { /Fortnite.com/Devices } using { /Fortnite.com/Devices/CreativeAnimation } using { /Verse.org/Simulation } using { /UnrealEngine.com/Temporary/SpatialMath } MatchScaleTargetTip<localizes>:message = "Dünya alanına hareket etmek için isteğe bağlı konum. Bir MoveTarget ayarlamak istemezsen bunu kullan." # Belirli bir ölçeğe veya bir Kreatif nesnesi ölçeğine göre ölçeklenen bir nesne. scaling_prop<public> := class<concrete>(movable_prop): -
scaling_propsınıf tanımının üst kısmına aşağıdaki alanları ekle.-
ScaleTargetsiçin düzenlenebilir birvector3dizisi. Bunlar nesnenin büyüyüp küçüleceği ölçeklerdir.Move()tamamlandıktan sonra, nesne ölçeği bu değerle çarpılır.# RootProp’un ölçekleneceği vector3 hedefleri dizisi. @editable {ToolTip := MoveTargetsTip} var ScaleTargets:[]vector3= array{} -
MatchScaleTargetadlı bir düzenlenebilir isteğe bağlıcreative_prop. Nesnenin başka bir nesne ölçeğiyle eşleşecek şekilde ölçeklenmesini istiyorsanScaleTargetsözelliğini kullanmak yerine bu değeri ayarlayabilirsin. Örneğin, sıfırlamadan önce tümü aynı boyuta ulaşan bir dizi platform oluşturmak istersen bu özelliği kullanabilirsin.# RootProp için ölçeğin eşleştirileceği isteğe bağlı Kreatif nesnesi. @editable {ToolTip := MatchScaleTargetTip} var MatchScaleTarget:?creative_prop = false -
TargetScaleadında değişken birrotation. Bu, nesnenin halihazırda ölçeklendiği ölçektir.# Nesnenin şu anda hedeflediği ölçektir. var TargetScale:vector3 = vector3{}
-
-
Son sınıf tanımın şu şekilde görünmelidir:
using { /Fortnite.com/Devices } using { /Fortnite.com/Devices/CreativeAnimation } using { /Verse.org/Simulation } using { /UnrealEngine.com/Temporary/SpatialMath } MatchScaleTargetTip<localizes>:message = "Dünya alanına hareket etmek için isteğe bağlı konum. Bir MoveTarget ayarlamak istemezsen bunu kullan." # Belirli bir ölçeğe veya bir kreatif nesnesi ölçeğine göre ölçeklenen bir nesne. scaling_prop<public> := class<concrete>(movable_prop): # RootProp’un ölçekleneceği vector3 hedefleri dizisi. @editable {ToolTip := MoveTargetsTip} var ScaleTargets:[]vector3= array{} # RootProp için ölçeğin eşleştirileceği isteğe bağlı kreatif nesnesi. @editable {ToolTip := MatchScaleTargetTip} var MatchScaleTarget:?creative_prop = false # Nesnenin şu anda hedeflediği ölçektir. var TargetScale:vector3 = vector3{} -
Nesneni
movable_propöğesinde hareket ettirenMove()fonksiyonunu zaten ayarladığın için bu sınıfta geçersiz kılabilirsin.scaling_propsınıfındaMove()fonksiyonunu geçersiz kıl.Move()dayken öncelikleMatchScaleTargetayarının yapılıp yapılmadığını kontrol et ve birScaleToMatchdeğişkenine kaydet. Eğer öyleyse,TargetScaleöğesiniScaleToMatcholarak ayarla ardındanTargetScale,MoveDuration,MoveEaseTypeveanimation_mode.OneShotöğesini geçirerekMoveToEase()özelliğini çağır. Yalnızca ölçeği değiştiren ve daha önce aşırı yüklediğinMoveToEase()fonksiyonudur.# RootProp’u ScaleTarget veya ayarlanmışsa MatchScaleTarget öğesine doğru ölçeklendir. Move<override>()<suspends>:void= # Ayarlanmışsa, TargetScale öğesini MatchScaleTarget olarak ayarla. if: ScaleToMatch := MatchScaleTarget?.GetTransform().Scale then: set TargetScale = ScaleToMatch # Nesneyi ölçeklendirmeye başlamak için MoveToEase öğesini çağır. OneShot animasyon modu, animasyonu bir kez oynatır. RootProp.MoveToEase(MoveDuration, TargetScale, MoveEaseType, animation_mode.OneShot) -
MatchScaleTargetayarlamadıysan,ScaleTargetsdizini yinelemen gerekir. Birforifadesinde,ScaleTargetsiçindeki her birScaleTargetöğesini yinele veTargetScaleöğesiniScaleTargetolarak ayarla. Ardından daha önce olduğu gibi aynı değerleri geçirerekMoveToEase()öğesini çağır. TamamlanmışMove()fonksiyonun şu şekilde görünmelidir:# RootProp’u ScaleTarget veya ayarlanmışsa MatchScaleTarget öğesine doğru ölçeklendir. Move<override>()<suspends>:void= # Ayarlanmışsa, TargetScale öğesini MatchScaleTarget olarak ayarla. if: ScaleToMatch := MatchScaleTarget?.GetTransform().Scale then: set TargetScale = ScaleToMatch # Nesneyi ölçeklendirmeye başlamak için MoveToEase öğesini çağır. OneShot animasyon modu, animasyonu bir kez oynatır. RootProp.MoveToEase(MoveDuration, TargetScale, MoveEaseType, animation_mode.OneShot) else: # Aksi halde ScaleTargets dizisindeki her bir hedefe ölçeklendir. for: ScaleTarget:ScaleTargets do: set TargetScale = ScaleTarget # Nesneyi ölçeklendirmeye başlamak için MoveToEase öğesini çağır. OneShot animasyon modu, animasyonu bir kez oynatır. RootProp.MoveToEase(MoveDuration, TargetScale, MoveEaseType, animation_mode.OneShot) -
prop_animatorcihaz sınıfında,ScalingPropsadında düzenlenebilir yeni birscaling_propdizisi ekle. Ölçeklenen tüm nesneler arasında dolaşan ve üzerine gelindiğindeSetup()özelliğini çağıranOnBegin()öğesine başka birforifadesi ekle. Güncellenenprop_animatorsınıfın şu şekilde görünmelidir:using { /Fortnite.com/Devices } using { /Verse.org/Simulation } using { /UnrealEngine.com/Temporary/Diagnostics } TranslatingPropsTip<localizes>:message = "Animasyonu kullanarak yer değiştiren (hareket eden) nesneler." RotatingPropsTip<localizes>:message = "Animasyonu kullanarak dönen nesneler." ScalingPropsTip<localizes>:message = "Animasyonu kullanarak ölçeklenen nesneler." # Her bir nesnenin Setup() metodunu çağırarak, animasyonda hareket eden nesneleri koordine eder. prop_animator := class(creative_device): # Animasyon kullanılarak hareket ettirilen movable_props dizisi. @editable {ToolTip := TranslatingPropsTip} TranslatingProps:[]translating_prop = array{} # Animasyon kullanılarak döndürülen movable_props dizisi. @editable {ToolTip := RotatingPropsTip} RotatingProps:[]rotating_prop = array{} # Animasyon kullanılarak ölçeklendirilen movable_props dizisi. @editable {ToolTip := ScalingPropsTip} ScalingProps:[]scaling_prop = array{} # Cihaz, çalışmakta olan bir oyunda başlatıldığında çalışır OnBegin<override>()<suspends>:void= # Her bir nesne için Setup() özelliğini çağırarak animasyona başla. for: Prop:TranslatingProps do: Prop.Setup() for: Prop:RotatingProps do: Prop.Setup() for: Prop:ScalingProps do: Prop.Setup() -
Kodunu kaydet ve onu derle.
Nesneleri Cihazlara Bağlama
Editöre geri dönerek, başka bir boşluk oluşturmak için dönen nesneler bölümünden sonra ancak yükseltilmiş bloklardan önce var olan bazı nesneleri sil. Bölümüne bir FG01 Boks Eldiveni ekle. Eldiveni ScalingGlove olarak adlandır. Eldiveni boşluğun ortasına konumlandır ve yukarı bakacak şekilde döndür.
Boks eldiveni kurulumu. Eldiven, oyuncuları yükseltmek için asansör oluşturulacak şekilde ölçeklendirilir.
Anahat Düzenleyicisi içerisindeki nesne animatörünü seç ve eldivenin için ScalingProps öğesine bir dizi elementi ekle. Nesneye aşağıdaki değerleri ata:
| Seçenek | Değer | Açıklama |
|---|---|---|
| ScaleTargets | {1.0, 2.0, 1.0}, {1.0, 1.0, 1.0} | Bu nesne, Y eksenindeki boyutlarının iki katına ölçeklenir ardından başlangıç boyutlarına geri ölçeklenir. Nesne döndürüldüğünden Y ekseninin artık nesneden yerel olarak “yukarıda” olduğunu unutma. |
| RootProp | Animasyonunu yaptığın nesneye ata. | Bu, animasyonunu yaptığın nesnedir. |
Değişiklikleri uygula ardından nesnelerini kontrol et! Farklı boyutlar elde etmek için farklı ölçekler kullanmayı dene ayrıca farklı senaryolar oluşturmak için diğer nesneleri ölçeklendirmeyi dene!
Gelecek Ders
Sonraki bölümde, üçünü de yapabilen nesneler oluşturmak için hareketi, dönüşü ve ölçeklendirmeyi birleştireceksin!
%animating-prop-movement-6-combining-movement-rotation-and-scale-in-verse:topic%
Tam Kod
Bu bölümde oluşturulan kodun tamamı şöyledir:
scaling_prop.verse
using { /Fortnite.com/Devices }
using { /Fortnite.com/Devices/CreativeAnimation }
using { /Verse.org/Simulation }
using { /UnrealEngine.com/Temporary/SpatialMath }
MatchScaleTargetTip<localizes>:message = "Dünya alanına hareket etmek için isteğe bağlı konum. Bir MoveTarget ayarlamak istemezsen bunu kullan."
# Belirli bir ölçeğe veya bir kreatif nesnesi ölçeğine göre ölçeklenen bir nesne.
scaling_prop<public> := class<concrete>(movable_prop):
# RootProp’un ölçekleneceği vector3 hedefleri dizisi.
@editable {ToolTip := MoveTargetsTip}
var ScaleTargets:[]vector3= array{}
# RootProp için ölçeğin eşleştirileceği isteğe bağlı kreatif nesnesi.
@editable {ToolTip := MatchScaleTargetTip}
var MatchScaleTarget:?creative_prop = false
# Nesnenin şu anda hedeflediği ölçektir.
var TargetScale:vector3 = vector3{}
# RootProp’u ScaleTarget veya ayarlanmışsa MatchScaleTarget öğesine doğru ölçeklendir.
Move<override>()<suspends>:void=
# Ayarlanmışsa, TargetScale öğesini MatchScaleTarget olarak ayarla.
if:
ScaleToMatch := MatchScaleTarget?.GetTransform().Scale
then:
set TargetScale = ScaleToMatch
# Nesneyi ölçeklendirmeye başlamak için MoveToEase öğesini çağır. OneShot animasyon modu, animasyonu bir kez oynatır.
RootProp.MoveToEase(MoveDuration, TargetScale, MoveEaseType, animation_mode.OneShot)
else:
# Aksi halde ScaleTargets dizisindeki her bir hedefe ölçeklendir.
for:
ScaleTarget:ScaleTargets
do:
set TargetScale = ScaleTarget
# Nesneyi ölçeklendirmeye başlamak için MoveToEase öğesini çağır. OneShot animasyon modu, animasyonu bir kez oynatır.
RootProp.MoveToEase(MoveDuration, TargetScale, MoveEaseType, animation_mode.OneShot)
prop_animator.verse
using { /Fortnite.com/Devices }
using { /Verse.org/Simulation }
using { /UnrealEngine.com/Temporary/Diagnostics }
TranslatingPropsTip<localizes>:message = "Animasyonu kullanarak yer değiştiren (hareket eden) nesneler."
RotatingPropsTip<localizes>:message = "Animasyonu kullanarak dönen nesneler."
ScalingPropsTip<localizes>:message = "Animasyonu kullanarak ölçeklenen nesneler."
# Her bir nesnenin Setup() metodunu çağırarak, animasyonda hareket eden nesneleri koordine eder.
prop_animator := class(creative_device):
# Animasyon kullanılarak hareket ettirilen movable_props dizisi.
@editable {ToolTip := TranslatingPropsTip}
TranslatingProps:[]translating_prop = array{}
# Animasyon kullanılarak döndürülen movable_props dizisi.
@editable {ToolTip := RotatingPropsTip}
RotatingProps:[]rotating_prop = array{}
# Animasyon kullanılarak ölçeklendirilen movable_props dizisi.
@editable {ToolTip := ScalingPropsTip}
ScalingProps:[]scaling_prop = array{}
# Cihaz, çalışmakta olan bir oyunda başlatıldığında çalışır
OnBegin<override>()<suspends>:void=
# Her bir nesne için Setup() özelliğini çağırarak animasyona başla.
for:
Prop:TranslatingProps
do:
Prop.Setup()
for:
Prop:RotatingProps
do:
Prop.Setup()
for:
Prop:ScalingProps
do:
Prop.Setup()