Oyununun hatalarını ayıklamaya yardımcı olması için test amacıyla bazı oyun verilerini oyuncudan gizleyip sadece kendin görecek şekilde görüntüleyebilirsin. Bunu yapmanın bir yolu günlüğe kaydetmektir ancak Hata Ayıklama Çizimi API’si ile bazı oyun verilerini daha iyi görülebilecek şekilde gösterebilirsin.
Hata Ayıklama Çizimi API’ını kullanarak basit şekiller çizebilir ve bu şekillerin konumunu, boyutunu, rengini ve ekranda görünme süresini ayarlayabilirsin. Örneğin, oyuncu olmayan bir karakterin görünürlük menzilini veya kaynak noktasından sesin duyulabileceği uzaklığı görselleştirmek isteyebilirsin. Kutu hata ayıklama şeklini kullanarak, herhangi bir etki aktörüyle eşleşen boyutları ve konumu içeren bir kutu çizebilirsin. Bunu, söz konusu etki aktörü oyununda görünmez olduğunda bile yapabilirsin. Bunu yapmak belirli efektlerle etki aktörlerinin yerleşimini anlamaya yardımcı olabilir.
Hata ayıklama amacıyla oyuncu olmayan bir karakterin yüzünden görünürlük menzilinin sınırına kadar çizilen ok şekli, muhafızların yerleşimini kusursuz bir şekilde tasarlamak için kullanılabilir.
Verse Hata Ayıklama Çizimini Etkinleştir
Öncelikle çizdiğin şekilleri görebildiğinden emin olman gerekir.
UEFN Anahat Düzenleyicisi’nde Ada Ayarları’nı seç.
Ayrıntılar paneli arama çubuğuna hata ayıkla yaz. Sonuçlar Kullanıcı Seçenekleri - Hata Ayıklama kategorisiyle filtrelenir.
Hata Ayıklama ve ardından Verse Hata Ayıklama Çizimi bölümlerine tıklayarak Hata Ayıklama özelliklerini ve Verse Hata Ayıklama Çizimini etkinleştir.
Verse Hata Ayıklama Çizimi yalnızca bir UEFN oyun oturumu sırasında etkin olur. Her kullanıcı için ayrıca etkindir. Yani yalnızca Hata Ayıklama ve Verse Hata Ayıklama Çizimini etkinleştirmiş olan kullanıcılar hata ayıklama şekillerini görür. Hata ayıklama şekilleri, Ada Ayarlarında bu seçenek işaretlenmiş olsa bile UEFN görünüm penceresinde veya yayınlanmış bir adada görünmez.
İlk Hata Ayıklama Şeklini Çiz
Hata Ayıklama Çizimi API’ı ile ilk şeklini çizmek için aşağıdaki adımları izle.
Bu içe aktarma ifadesini Verse dosyana ekle.
Verseusing { /UnrealEngine.com/Temporary/Diagnostics }Debug_draw_channeltüründen devralan bir alt sınıf tanımlayarak bir kanal oluştur. Kanallar ilgili şekilleri bir arada gruplandırmak içindir. Kanallar isteğe bağlıdır ancak kullanılması yararlı bir uygulamadır. Hata Ayıklama Çizimi API’sinde birçok şekli aynı anda göstermek, gizlemek veya temizlemek için kullanabileceğin fonksiyonlar bulunur. Gösterme ve gizleme fonksiyonları ise yalnızca kanal düzeyinde çalışır.Versemy_debug_draw := class(debug_draw_channel) {}Debug_drawtüründe yeni bir sabit bildir. Bu sabit, şekilleri çizme metotlarını çağırmak üzere kullanacağın objedir. Bu örnekte Kanal parametresinin (önceki adımda oluşturulan) kullanımı gösterilir ancak bu isteğe bağlıdır.VerseDebugDraw:debug_draw = debug_draw{Channel := my_debug_draw}DrawSpheremetodunu çağır. Bu örnekte iki parametre kullanılır.
Center:= vector3{Z:= 150.0}: vector3 türündeki bu zorunlu parametre, küre merkezinin konumunu belirler. Bu örnekte bir değişmez değer oluşturmak içinvector3türünde bir oluşturucu kullanacaksın. Bu işlem, kürenin merkezini0.0, 0.0, 150.0konumuna ayarlar.?DrawDurationPolicy:= debug_draw_duration_policy.Persistent: Bu parametre isteğe bağlıdır ancak varsayılan değeri, birkaç saniye sonra kürenin kaybolmasına neden olur. Bu yüzden bu seçeneği kalıcı ilke olarak ayarlamalısın. Bu ayar, kürenin gizlenene veya başka kodla temizlenene kadar adada görünür kalacağı anlamına gelir.VerseDebugDraw.DrawSphere(Center := vector3{Z:=150.0}, ?DrawDurationPolicy := debug_draw_duration_policy.Persistent)
Verse kodunu derleyip bir oturum başlattıktan sonra Center parametresi ile ayarlanan konumda bir küre görmen gerekir.
Şekiller
Hata Ayıklama Çizimi API’ıyla, çalışan bir UEFN oturumunda basit şemalar halinde görünen birden fazla şekil oluşturabilirsin. Her şekil farklı senaryolarda kullanışlıdır. Aşağıdaki bölümlerde her bir şeklin nasıl çizileceği ve her yönteme özgü parametreler açıklanmıştır. Her yöntem için ortak olan parametreler daha sonraki bir bölümde açıklanacaktır. Bu bölümdeki her kod örneği, kodu İlk Hata Ayıklama Şeklini Çiz bölümünden Verse dosyana eklediğini varsayar.
Kutu
Bir küp çizmek için DrawBox() metodunu kullan.
DebugDraw.DrawBox(vector3{Z:=150.0}, rotation{}, ?DrawDurationPolicy := debug_draw_duration_policy.Persistent)| Benzersiz Parametre | Ne Yapar? |
|---|---|
Center:vector3 | Kutunun merkezini ayarlar. |
Rotation:rotation | Kutunun dönüş şeklini ayarlar. |
?Extent:vector3 | Kutunun uzunluğunu, genişliğini ve derinliğini ayarlar. |
Kapsül
Bir kapsül çizmek için DrawCapsule() metodunu kullan. Kapsül, her iki ucunda bir kürenin yarısı bulunan bir silindirden oluşur.
DebugDraw.DrawCapsule(vector3{Z:=200.0}, rotation{}, ?DrawDurationPolicy := debug_draw_duration_policy.Persistent)| Benzersiz Parametre | Ne Yapar? |
|---|---|
Center:vector3 | Kapsülün merkezini ayarlar. |
Rotation:rotation | Kapsülün dönüş şeklini ayarlar. |
?Height:float | Kapsülün uzunluğunu ayarlar. |
?Radius:float | Kapsülün en geniş noktasındaki yarıçapını ayarlar. |
Küre
Bir küre çizmek için DrawSphere() metodunu kullan.
DebugDraw.DrawSphere(vector3{Z:=150.0}, ?DrawDurationPolicy := debug_draw_duration_policy.Persistent)| Benzersiz Parametre | Ne Yapar? |
|---|---|
Center:vector3 | Kürenin merkezini ayarlar. |
?Radius:float | Kürenin en geniş noktasında yarıçapını ayarlar. |
?NumSegments:int | Küreyi oluşturan çizgi sayısını ayarlar. |
Koni
Bir koni çizmek için DrawCone() metodunu kullan.
DebugDraw.DrawCone(vector3{Z:=150.0}, vector3{Z:=-1.0}, ?DrawDurationPolicy := debug_draw_duration_policy.Persistent)| Benzersiz Parametre | Ne Yapar? |
|---|---|
Origin:vector3 | Koni ucunun konumunu ayarlar. |
Direction:vector3 | Koninin açıldığı yönü ayarlar. |
?Height:float | Koninin uzunluğunu ayarlar. |
?NumSides:int | Kenar sayısını ayarlar. |
?AngleWidthRadians:float | Koninin X yönündeki genişliğini ayarlar. |
?AngleHeightRadians:float | Koninin Y yönündeki genişliğini ayarlar. |
Koninin tabanını kusursuz bir daire yapmak için AngleWidthRadians ve AngleHeightRadians değerleri eşit olmalıdır.
Silindir
Bir silindir çizmek için DrawCylinder() metodunu kullan.
DebugDraw.DrawCylinder(vector3{Z:=100.0}, vector3{Z:=200.0}, ?DrawDurationPolicy := debug_draw_duration_policy.Persistent)| Benzersiz Parametre | Ne Yapar? |
|---|---|
Start:vector3 | Silindirin bir ucunun konumunu ayarlar. |
End:vector3 | Silindirin diğer ucunun konumunu ayarlar. |
?NumSegments:int | Silindirin bir ucunu diğerine bağlayan çizgilerin sayısını ayarlar. |
?Radius:float | Silindirin her bir ucunu oluşturan iki dairenin yarıçapını ayarlar. |
Çizgi
Bir çizgi çizmek için DrawLine() metodunu kullan.
DebugDraw.DrawLine(vector3{Z:=100.0}, vector3{Z:=200.0}, ?DrawDurationPolicy := debug_draw_duration_policy.Persistent)| Benzersiz Parametre | Ne Yapar? |
|---|---|
Start:vector3 | Çizginin bir ucunun konumunu ayarlar. |
End:vector3 | Çizginin diğer ucunun konumunu ayarlar. |
Ok
Bir ok çizmek için DrawArrow() metodunu kullan.
DebugDraw.DrawArrow(vector3{Z:=100.0}, vector3{Z:=200.0}, ?DrawDurationPolicy := debug_draw_duration_policy.Persistent)| Benzersiz Parametre | Ne Yapar? |
|---|---|
Start:vector3 | Okun başlangıç konumunu ayarlar. |
End:vector3 | Ok ucunun konumunu ayarlar. |
?ArrowSize:float | Ok ucunu oluşturan iki çizginin uzunluğunu ayarlar. |
Nokta
Bir nokta çizmek için DrawPoint() metodunu kullan.
DebugDraw.DrawPoint(vector3{Z:=200.0}, ?Thickness:= 10.0, ?DrawDurationPolicy := debug_draw_duration_policy.Persistent)| Benzersiz Parametre | Ne Yapar? |
|---|---|
Position:vector3 | Noktanın konumunu ayarlar. |
DrawPoint şeklinin varsayılan Thickness değeri görünmeyecek kadar küçüktür. Noktayı görebilmek için Thickness değerini yukarıdaki örnekte gösterildiği gibi daha büyük bir değere ayarla.
Yaygın Parametreler
Bu parametreler tüm şekil çizme yöntemleri için ortaktır. Aynı zamanda bunların hepsi isteğe bağlıdır ve bir yöntem çağrılırken bağımsız değişken olarak dahil edilmesi gerekmez. Bu parametreleri dahil etmeyi seçersen parametre adının başına ? ekleyerek kullandığından emin ol. Adlandırılmış ve isteğe bağlı bağımsız değişkenler hakkında daha fazla bilgi almak için Fonksiyonların İçinde Fonksiyon Çağırma bölümüne bak.
Renk
Şekillerin rengini ayarlamak için Color parametresini kullan. Değerler color türünde olmalıdır. Geçerli renklerin listesini NamedColors modülü bölümünde bulabilirsin. Verse dosyanın en üst kısmında Colors modülü için içe aktarma ifadesinin bulunduğundan emin ol. Aşağıda bir noktayı farklı bir renge ayarlama örneği verilmiştir.
DebugDraw.DrawPoint(Position := vector3{Z:= 200.0}, ?Thickness := 20.0, ?Color := NamedColors.MediumSeaGreen)DrawDurationPolicy
DrawDurationPolicy bir hata ayıklama şeklinin ekranda ne kadar süreyle kalacağını belirler. Üç olası değeri vardır.
SingleFrame: Şekil, ekranda tek bir kare boyunca kalır. Bu ilke, bir şekli sıklıkla yeniden çizmek istediğinde kullanışlı olabilir.FiniteDuration: Bu ilke, bir şekli belirli saniyeler boyunca göstermek içinDurationparametresiyle birlikte kullanılır.Persistent: Persistent ilkesinde şekil, gizlenene veya başka bir kodla temizlenene kadar ekranda kalır.
Duration
Duration parametresi, bir şekli belirli saniyeler boyunca göstermek için FiniteDuration ilkesiyle birlikte kullanılır. Aşağıda, 30 saniye boyunca gösterilecek bir küre çizen kodun örneği verilmiştir.
DebugDraw.DrawSphere(vector3{}, ?DrawDurationPolicy := debug_draw_duration_policy.FiniteDuration, ?Duration := 30.0)Thickness
Thickness parametresi, her bir hata ayıklama şeklini oluşturan çizgilerin kalınlığını ayarlar. DrawPoint() örneğinde tek noktanın kalınlığını ayarlar.
Channel
Kanalları kullanarak ilgili şekilleri bir arada gruplandırabilir, sonra bir kanaldaki tüm şekilleri aynı anda gizleyebilir, gösterebilir veya temizleyebilirsin.
Kanal oluşturmak için bir debug_draw örneğini tanımlarken Channel parametresini kullan.
DebugDraw:debug_draw = debug_draw{Channel := debug_draw_defaults}Artık DebugDraw örneğini kullanırken çizdiğin her şekil tek bir metotla gizlenebilir, gösterilebilir veya temizlenebilir. Örneğin; DebugDraw örneğiyle bir nokta, küre ve ok çizersen bu şekilleri bir süre boyunca gizleyebilir, sonra tekrar gösterebilir ve sonunda artık ihtiyacın kalmadığında temizleyebilirsin.
# Point
DebugDraw.DrawPoint(vector3{Z := 200.0}, ?Thickness:= 50.0, ?DrawDurationPolicy:= debug_draw_duration_policy.Persistent)
# Sphere
DebugDraw.DrawSphere(vector3{Z := 200.0}, ?DrawDurationPolicy:= debug_draw_duration_policy.Persistent)
# Arrow
DebugDraw.DrawArrow(vector3{Z := 200.0}, vector3{Z := 400.0}, ?DrawDurationPolicy:= debug_draw_duration_policy.Persistent)
Sleep(5.0)
Varsayılan Parametre Değerleri
| Parametre | Değer |
|---|---|
?Color:color |
|
?DrawDurationPolicy:debug_draw_duration_policy |
|
?Duration:float |
|
?Thickness:float |
|
?Radius:float |
|
Örnekler
Bir Ses Çalar Cihazının Menzilini Görselleştirme
Ses Çalar Cihazı, kendi zayıflamasını görselleştiren bir ayara sahiptir. Ancak bu görselleştirmeyi yalnızca düzenleme modunda görebilirsin. Bir oyun oturumunda zayıflama görsellerini yeniden oluşturma hakkında bilgi edinmek için aşağıdaki adımları izle.
Bir Ses Çalar Cihazını bölümüne sürükle. Ayrıntılar panelinde Zayıflama Görsellerini Etkinleştir seçeneğinin işaretli olduğundan emin ol. Bu seçeneğin işaretli olması, görselleri hata ayıklama şekilleriyle doğru biçimde yeniden oluşturduğunu doğrulamaya yardımcı olur.
Verse dosyanda
DebugDrawAudioadlı yeni birdebug_drawoluştur. Bu örneğedebug_draw_audioadıyla bir kanal ver.VerseDebugDrawAudio:debug_draw = debug_draw{Channel := debug_draw_audio}Floattüründe iki@editablesabit ekle. SabitlereDebugAttenuationMinDistanceveDebugAttenuationFalloffDistanceadlarını ver. Bu sabitler, Ses Çalar Cihazının zayıflamasını görselleştirmek için çizilen kürelerin yarıçapları olacaktır.Verse@editable DebugAttenuationMinDistance:float = 100.0 @editable DebugAttenuationFalloffDistance:float = 100.0Ses Çalar cihazını temsil edecek başka bir
@editablesabiti ekle. AdınıAudioPlayerDeviceolarak belirle.Verse@editable AudioPlayerDevice:audio_player_device = audio_player_device{}DrawAudioDeviceRange()adlı bir fonksiyon tanımla ve bu fonksiyonafloattüründe iki parametre ver:AttenuationMinDistanceveAttenuationFalloffDistance.VerseDrawAudioDeviceRange(AttenuationMinDistance:float, AttenuationFalloffDistance:float):void =Yeni fonksiyonda Ses Çalar Cihazının Dönüşüm objesini al.
VerseAudioPlayerDeviceTransform:= AudioPlayerDevice.GetTransform()Hata Ayıklama Çizimi API’sindeki
DrawSpherefonksiyonunu kullanarak Zayıflama Minimum Mesafesini ve Zayıflama Azalma Mesafesini temsil edecek iki küre çiz. Zayıflama yalnızca Zayıflama Minimum Mesafesinin yarıçapının dışında kalan alanda başladığından ikinciDrawSphereçağrısındakiRadiusdeğeri,AttenuationMinDistanceileAttenuationFalloffDistancedeğerlerinin toplamına ayarlanmalıdır.VerseDebugDrawAudio.DrawSphere( AudioPlayerDeviceTransform.Translation, ?Radius:= AttenuationMinDistance, ?DrawDurationPolicy:= debug_draw_duration_policy.Persistent) DebugDrawAudio.DrawSphere( AudioPlayerDeviceTransform.Translation, ?Radius:= AttenuationMinDistance + AttenuationFalloffDistance, ?DrawDurationPolicy:= debug_draw_duration_policy.Persistent)Verse dosyanın
OnBegin()fonksiyonundaDrawAudioDeviceRange()fonksiyonunu çağır.VerseOnBegin<override>()<suspends>:void= DrawAudioDeviceRange(DebugAttenuationMinDistance, DebugAttenuationFalloffDistance)Verse kodunu oluştur. Verse cihazının Ayrıntılar panelinde DebugAttenuationMinDistance ve DebugAttenuationFalloffDistance değerlerini ayarladığından emin ol. Bu değerler Ses Çalar cihazının Zayıflama Minimum Mesafesi ile Zayıflama FalloffDistance değerlerinin 100 ile çarpımına eşit olmalıdır.
Ses Çalar Cihazı, Zayıflama Minimum Mesafesi ile Zayıflama Azalma Mesafesi için metre birimi kullanır. Hata Ayıklama Çizimi API’ında santimetre kullanıldığından değerleri dönüştürmen gerekir.
Tam Kod
Verseusing { /Fortnite.com/Devices } using { /Fortnite.com/Characters } using { /Fortnite.com/Playspaces } using { /UnrealEngine.com/Temporary/Diagnostics } using { /UnrealEngine.com/Temporary/SpatialMath } debug_audio_device := class(creative_device): @editable AudioPlayerDevice:audio_player_device = audio_player_device{}