Karar Yapıları

Bazı durumlarda yaptığımız programlara oyunlara yön vermemiz gerekir. Örneğin mermisi bittiyse, oyun başlamadıysa, karakter yürümüyorsa vb. gibi bir çok senaryo üretilebilir. İşte bu durumlarda karar yapıları kullanılır. Program bizim belirlediğimiz seçenekler doğrultusunda akışına devam eder. Programla dillerinde if else ve switch case deyimleri Blueprint içinde Branch ve Switch on Variable(Type) olarak karşımıza çıkmaktadır. 

Branch : Aldığı bool tipindeki Contiditon parametresi true ise true, false ise false çıkışından program akışına devam eder.
OMYyg5.jpg

Condition parametresi sadece bool tipinde değişken alabildiği gibi operatörler yardımıyla da karar gerçekleştirilebilir. Aşağıda operatörler verilmiştir.

<   Küçüktür
>   Büyüktür
<= Küçük Eşittir
>= Büyük Eşittir
!=  Eşit Değildir
== Eşittir
nrzOYV.jpg

Switch on: Selection pininden aldığı input sağ tarafta bulunan çıkışlardan hangisine eşit ise o yoldan program akışına devam eder. Add Pin diyerek yeni değer eklenebilir. Eğer değer hiç birine eşit değilse program Default çıkışından akışına devam eder.
l1JOLr.jpg
Örnek olarak Switch on Int verilmiştir. Fakat Switch on String,Text vb gibi farklı Node'lar bulunmaktadır.

Virgüllü sayılar üzerinde(float yada double) doğrudan eşitllik(==, equality) kıyaslaması yapmak çoğunlukla yanlış sonuç verir. Bu yüzden Nearly Equal fonksiyonu kullanılabilir.
82510-nearlyequalfloat.png

Örnek bir senaryoda bir aracın hızının 100cm/sn olup olmadığı kontrol edilmek isteniyor. Araç hızı Get Actor Velocity ile alındığında float cm/sn cinsinden bir değer alınır. Bu değer, 0cm/sn den 120cm/sn hıza çıkan bir araç için çoğunlukla 100cm/sn değerine hiç eşit olmayacaktır. n. karede 98,6cm/sn ve n+1. karede 100,5 cm/sn gibi bir değer alabilir. Bu durumda == operatörü çalışmayacaktır.

Ne Yapmalı?

  1. Hızın 100 cm/sn değerini aşıp aşmadığı kontrol edilmek isteniyorsa > 100 yada >= 100 kullanılabilir.
  2. Hızın 100 cm/sn hıza neredeyse eşit olup olmadığı Nearly Equal (float) ile kontrol edilebilir. Bu fonksiyonda ErrorTolerance değeri 100cm/sn değerine ne kadar yakın olduğunu belirlemek için kullanılır. Arka planda |A - B| < ErrorTolerance işlemi yapar.


Not: Float üzerinde eşitlik kıyaslaması yapıldığında zaten oldukça düşük bir tolerans değeri vardır. Örneğin 1.0 ile 1.000001 değerleri == operatörü ile bile eşit kabul edilir. Bu 0.000001 değeri oyun motoru üzerinde sistemin virgüllü sayılar için belirlediği hata payıdır.

YORUMLAR