Bu türe özgü bir başka platform engeli de, sürekli olarak hareket etmen gereken dönen bir platform veya üzerinden atlaman gereken ileri geri hareket eden bir çubuk gibi dönen objelerdir.
Bir obje dönüşümünün ikinci bileşeni onun dönüşüdür ve objeyi bir eksen etrafında dönecek şekilde değiştirebilirsin. Benzersiz platform zorlukları oluşturmak için dönüşü kullanmanın birkaç farklı yolu vardır ve bu bölümde bunları nasıl kodlayacağını öğreneceksin.
Dönen Nesneler Yapma
Nesneleri döndüren kodu oluşturmak için şu adımları izle:
-
Verse Gezgini ile
movable_propöğesinden devralınanrotating_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.# Ek bir dönüş yaparak dönen veya kreatif nesnesi dönüşü ile eşleşecek # şekilde dönen bir nesne. rotating_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 } AdditionalRotationTip<localizes>:message = "RootProp’a uygulanacak dönüş." ShouldRotateForeverTip<localizes>:message = "RootProp’un her zaman dönmesi gerekip gerekmediğini gösterir." MatchRotationTargetTip<localizes>:message = "Dönüşü RootProp dönüşüyle aynı olması gereken isteğe bağlı nesne. Bir Ek Dönüş ayarlamak istemezsen bunu kullan." # Ek bir dönüş yaparak dönen veya kreatif nesnesi dönüşü ile eşleşecek # şekilde dönen bir nesne. rotating_prop<public> := class<concrete>(movable_prop): rotating_propsınıf tanımının üst kısmına aşağıdaki alanları ekle.-
AdditionalRotationadında düzenlenebilir birrotation. Nesneye uygulanacak dönüştür.Move()tamamlandıktan sonra, nesne dönüşü bu değerde ofsetlenir.# RootProp’a uygulanacak ek dönüş. @editable {ToolTip := AdditionalRotationTip} AdditionalRotation:rotation = rotation{} -
ShouldRotateForeveradlı bir düzenlenebilirlogic. Nesnenin sıfırlanmadan dönmeye devam edip etmeyeceğini belirtir.# RootProp’un sonsuza dek dönüp dönmeyeceğini gösterir. @editable {ToolTip := ShouldRotateForeverTip} ShouldRotateForever:logic = true -
MatchRotationTargetadlı bir düzenlenebilir isteğe bağlıcreative_prop. Nesnenin başka bir nesne dönüşüyle eşleşecek şekilde dönmesini istiyorsanAdditionalRotationözelliğini kullanmak yerine bu değeri ayarlayabilirsin.# Dönüşü RootProp dönüşüyle eşleşmesi gereken isteğe bağlı nesne. Bunu kullanmak için # ek bir dönüş ayarlamak istemiyor olman gerekir. @editable {ToolTip := MatchRotationTargetTip} MatchRotationTarget:?creative_prop = false -
TargetRotationadında birrotationdeğişkeni. Bu, nesnenin halihazırda dönme işlemini gerçekleştirdiği dönüş yönüdür.# Nesnenin halihazırda dönme işlemini gerçekleştirdiği dönüş yönüdür. var TargetRotation:rotation = rotation{}
-
-
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 } AdditionalRotationTip<localizes>:message = "RootProp’a uygulanacak dönüş." ShouldRotateForeverTip<localizes>:message = "RootProp’un her zaman dönmesi gerekip gerekmediğini gösterir." MatchRotationTargetTip<localizes>:message = "Dönüşü RootProp dönüşüyle aynı olması gereken isteğe bağlı nesne. Bir Ek Dönüş ayarlamak istemezsen bunu kullan." # Ek bir dönüş yaparak dönen veya kreatif nesnesi dönüşü ile eşleşecek # şekilde dönen bir nesne. rotating_prop<public> := class<concrete>(movable_prop): # RootProp’a uygulanacak ek dönüş. @editable {ToolTip := AdditionalRotationTip} AdditionalRotation:rotation = rotation{} # RootProp’un sonsuza dek dönüp dönmeyeceğini gösterir. @editable {ToolTip := ShouldRotateForeverTip} ShouldRotateForever:logic = true # Dönüşü RootProp dönüşüyle eşleşmesi gereken isteğe bağlı nesne. Bunu kullanmak için # ek bir dönüş ayarlamak istemiyor olman gerekir. @editable {ToolTip := MatchRotationTargetTip} MatchRotationTarget:?creative_prop = false # Nesnenin halihazırda dönme işlemini gerçekleştirdiği dönüş yönüdür. var TargetRotation:rotation = rotation{} -
Nesneni
movable_propöğesinde hareket ettirenMove()fonksiyonunu zaten ayarladığın için bu sınıfta geçersiz kılabilirsin.rotating_propsınıfındaMove()fonksiyonunu geçersiz kıl.Move()dayken öncelikleMatchRotationTargetayarının yapılıp yapılmadığını kontrol et ve birRotationToMatchdeğişkenine kaydet. İşlem gerçekleştirildiyse,TargetRotationöğesiniRotationToMatcholarak ayarla. Aksi haldeAdditionalRotationolarak ayarla.# RootProp’u TargetRotation uygulayarak veya ayarlanmışsa MovePosition öğesine doğru döndür. Move<override>()<suspends>:void= # MoveTarget ayarlanmışsa TargetRotation öğesini MoveTarget dönüşüne ayarla. if: RotationToMatch := MatchRotationTarget?.GetTransform().Rotation then: set TargetRotation = RotationToMatch else: set TargetRotation = AdditionalRotation - Oynatılacak animasyonun için
translating_propbölümünde yaptığın gibi animasyon modunu belirle.AnimationModeadında yeni biranimation_modedeğişkeninianimation_mode.OneShotolarak başlat. Objen hedefine ulaştığında animasyonunun duracağı anlamına gelir. Nesnenin her zaman dönmesi veya bir defa hareket edip durması gerekmiyorsa animasyon modunu Pinpon moduna ayarla. Pinpon kullanarak metronomdaki çubuk veya yükselip alçalan köprü gibi ileri geri salınan objeler yapabilirsin.# Oynatılacak varsayılan animasyon modunu ayarla. # OneShot animasyon modu, animasyonu bir defa oynatır. var AnimationMode:animation_mode := animation_mode.OneShot # RootProp özelliğinin dönmeyi bitirdiğinde sıfırlanmaması ve durmaması gerekiyorsa, # animasyon modunu PingPong olarak ayarla. if: not ShouldRotateForever? and not MoveOnceAndStop? then: set AnimationMode = animation_mode.PingPongShouldResetfalse veShouldRotateForevertrue olarak ayarlanırsa nesnen,Move()döngüsüne devam ederken her animasyondan sonra konumunu korumalıdır. -
StartingTransformöğesindeykenRotateBy()çağırıpTargetRotationı geçirerekRotateByMoveRotationadında yeni bir değişkene doğru dönmek için kök nesnenin dönüşünü al. ArdındanMoveToEase()çağrısı yap. TamamlanmışMove()fonksiyonun şu şekilde görünmelidir.# RootProp’u TargetRotation uygulayarak veya ayarlanmışsa MovePosition öğesine doğru döndür. Move<override>()<suspends>:void= # MoveTarget ayarlanmışsa TargetRotation öğesini MoveTarget dönüşüne ayarla. if: RotationToMatch := MatchRotationTarget?.GetTransform().Rotation then: set TargetRotation = RotationToMatch else: set TargetRotation = AdditionalRotation # Oynatılacak varsayılan animasyon modunu ayarla. # OneShot animasyon modu, animasyonu bir defa oynatır. var AnimationMode:animation_mode := animation_mode.OneShot # RootProp özelliğinin dönmeyi bitirdiğinde sıfırlanmaması ve durmaması gerekiyorsa, # animasyon modunu PingPong olarak ayarla. if: not ShouldRotateForever? and not MoveOnceAndStop? then: set AnimationMode = animation_mode.PingPong # StartTransform özelliğini # AdditionalRotation ile döndürerek dönüş yönünü al. Ardından dönüşü başlat. RotateByTargetRotation := StartingTransform.Rotation.RotateBy(TargetRotation) RootProp.MoveToEase(RotateByTargetRotation, MoveDuration, MoveEaseType, AnimationMode) -
prop_animatorcihaz sınıfında,RotatingPropsadında düzenlenebilir yeni birrotating_propdizisi ekle. Dönen 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." # Her bir nesnenin Setup() metodunu çağırarak, animasyonda hareket eden nesneleri koordine eder. prop_animator := class(creative_device): # Animasyon kullanılarak hareket ettirilen nesnelerin dizisi. @editable TranslatingProps:[]translating_prop = array{} @editable RotatingProps:[]rotating_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() - Kodunu kaydet ve onu derle.
Nesneleri Cihazlara Bağlama
Editöre geri dönerek başka bir boşluk oluşturmak için hareketli nesneler bölümünden sonra nesnelerin bazılarını sil. Bölümüne FG01 Döner Platform tabanı ve FG01 SpinningBar İkili S ekle. Tabanı RotatingBase ve çubuğu Döner Çubuk olarak adlandır. Çubuğu tabanın üzerine konumlandır ve her iki nesneyi de boşluğun üzerine yerleştir.
Dönen iki nesnenin kurulumu. Döner çubuk ve dönen taban aynı yönde farklı hızlarda döner.
Anahat Düzenleyicideyken nesne animatörünü seç ve dönen nesnelerin her biri için RotatingProps işlevine bir dizi elementi ekle. Her bir nesneye aşağıdaki değerleri ata:
| Seçenek | Değer | Açıklama |
|---|---|---|
| Ek Dönüş | Z, 90.0 | Bu nesne her seferinde Z ekseni etrafında 90 derecelik bir dönüş yapar. |
| RootProp | Animasyonunu yaptığın nesneye ata | Bu, animasyonunu yaptığın nesnedir. |
| Hareket Süresi | 2.0, 3.0 | Farklı hızlarda dönmeleri için nesnelerden birine daha kısa bir süre ata. |
| Hareket Yavaşlatma Türü | Doğrusal | Bu, nesnelerinin animasyonunu tutarlı bir hızda yapar. |
Değişiklikleri uygula ardından nesnelerini kontrol et! Farklı dönüşler elde etmek için farklı değerler kullanmayı dene, farklı türde engeller oluşturmak için ise farklı boyutların her birinde dönüşü dene.
Gelecek Ders
Sonraki bölümde, her ikisini de yapabilen nesneler oluşturmak için hareket ile dönüşü birleştireceksin!
Tam Kod
Bu bölümde oluşturulan kodun tamamı şöyledir:
rotating_prop.verse
using { /Fortnite.com/Devices }
using { /Fortnite.com/Devices/CreativeAnimation }
using { /Verse.org/Simulation }
using { /UnrealEngine.com/Temporary/SpatialMath }
AdditionalRotationTip<localizes>:message = "RootProp’a uygulanacak dönüş."
ShouldRotateForeverTip<localizes>:message = "RootProp’un her zaman dönmesi gerekip gerekmediğini gösterir."
MatchRotationTargetTip<localizes>:message = "Dönüşü RootProp dönüşüyle aynı olması gereken isteğe bağlı nesne. Bir Ek Dönüş ayarlamak istemezsen bunu kullan."
# Ek bir dönüş yaparak dönen veya kreatif nesnesi dönüşü ile eşleşecek
# şekilde dönen bir nesne.
rotating_prop<public> := class<concrete>(movable_prop):
# RootProp’a uygulanacak ek dönüş.
@editable {ToolTip := AdditionalRotationTip}
AdditionalRotation:rotation = rotation{}
# RootProp’un sonsuza dek dönüp dönmeyeceğini gösterir.
@editable {ToolTip := ShouldRotateForeverTip}
ShouldRotateForever:logic = true
# Dönüşü RootProp dönüşüyle eşleşmesi gereken isteğe bağlı nesne. Bunu kullanmak için
# ek bir dönüş ayarlamak istemiyor olman gerekir.
@editable {ToolTip := MatchRotationTargetTip}
MatchRotationTarget:?creative_prop = false
# Nesnenin halihazırda dönme işlemini gerçekleştirdiği dönüş yönüdür.
var TargetRotation:rotation = rotation{}
# RootProp’u TargetRotation uygulayarak veya ayarlanmışsa MoveTarget hedefine doğru döndür.
Move<override>()<suspends>:void=
# Ayarlanmışsa, TargetRotation öğesini RotationToMatch olarak ayarla. Aksi takdirde
# AdditionalRotation olarak ayarla.
if:
RotationToMatch := MatchRotationTarget?.GetTransform().Rotation
then:
set TargetRotation = RotationToMatch
else:
set TargetRotation = AdditionalRotation
# Oynatılacak varsayılan animasyon modunu ayarla.
# OneShot animasyon modu, animasyonu bir defa oynatır.
var AnimationMode:animation_mode := animation_mode.OneShot
# RootProp özelliğinin dönmeyi bitirdiğinde sıfırlanmaması ve durmaması gerekiyorsa,
# animasyon modunu PingPong olarak ayarla.
if:
not ShouldRotateForever? and not MoveOnceAndStop?
then:
set AnimationMode = animation_mode.PingPong
# StartTransform’u
# AdditionalRotation ile döndürerek dönüş yönünü al. Ardından dönüşü başlat.
RotateByTargetRotation := StartingTransform.Rotation.RotateBy(TargetRotation)
RootProp.MoveToEase(RotateByTargetRotation, MoveDuration, MoveEaseType, AnimationMode)
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."
# Her bir nesnenin Setup() metodunu çağırarak, animasyonda hareket eden nesneleri koordine eder.
prop_animator := class(creative_device):
# Animasyon kullanılarak hareket ettirilen nesnelerin dizisi.
@editable
TranslatingProps:[]translating_prop = array{}
@editable
RotatingProps:[]rotating_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()