urcu' Alıntı:Is valid , fonksiyonunu işlev olarak tam anlayamadım bana yardımcı olabilirmisiniz
Typename* Ref;
if (Ref != NULL)
{
}
// yada daha kısa
if (Ref)
{
}
// C++ 11 ve sonrasında (öncekiler de hala kullanılabilir)
if (Ref != nullptr)
{
}
Teşekkür ederim emeğinize sağlıkcahitburak' Alıntı:urcu' Alıntı:Is valid , fonksiyonunu işlev olarak tam anlayamadım bana yardımcı olabilirmisiniz
Referans tipler için null olmama durumunu belirtir.
Temelde 2 tip vardır diyebiliriz. Bunlardan ilki değer(value type), ikincisi referanstır(reference type/pointer).
BP Value Types: Integer, Float, String, Name, Vector, Rotator...
C++ Value Types: int32, float, FString, FName, FVector, FRotator...
Değer tipler doğru yada yanlış mutlaka bir değere sahiptir. Bir Integer oluşturduğunuzda UE+ otomatik olarak onu 0 ile yükler(Initialize). UE4 böyle birşey yapmasaydı da bellekte ayrılan alanda önceden kayıtlı değeri alacak ve mutlaka bir değere sahip olacaktı.
Bir referans tip, herhangi bir değer tipi için bellek adresini işaret eder. BP'de herhangi bir tip seçildiğinde, değer olarak mı yoksa referans olarak mı seçileceği sorulur. Bir referans tipi ise geçerli bir objeyi işaret ediyor da olabilir, etmiyor da olabilir. Bu yüzden referans değerin işaret ettiği objenin geçerli olup olmadığı sorgulanmalıdır. IsValid bu sorguyu yapar.
C++ için IsValid eşdeğeri:
Kod:Typename* Ref; if (Ref != NULL) { } // yada daha kısa if (Ref) { } // C++ 11 ve sonrasında (öncekiler de hala kullanılabilir) if (Ref != nullptr) { }
urcu' Alıntı:Teşekkür ederim emeğinize sağlık
Yazdıklarınızı dikkatle inceledim şimdi biraz daha pekişti çok teşekkürlercahitburak' Alıntı:urcu' Alıntı:Teşekkür ederim emeğinize sağlık
O halde nerede, ne zaman kullanmak gerekir sorularını da yanıtlayalım.
Diyelim ki OnComponentBeginOverlap gibi bir node için OtherActor yada OtherComponent gibi referans değerlerini ele alalım. Bu değerlerin geçerli olup olmama (IsValid) durumunu kontrol etmeye gerek yok. Çünkü belli ki fizik motoru bir çarpışma algıladıysa bu geçerli bir Actor'dür.
Diğer taraftan OtherActor değerini bir yere kaydettiniz ve OnComponentBeginOverlap olayı(event) oluşur oluşmaz değil de sonradan bu Actor üzerinde bir işlem yapmak istiyorsunuz. İşte o zaman bu Actor referansının geçerliliğini kontrol etmek gerekir. Çünkü çarpışma olduğunda böyle bir Actor vardı ve geçerli bir referans değeriydi ama siz örneğin birkaç saniye sonra işlem yaptığınızda, başka bir nedenden dolayı artık olmayabilir. Örneğin bu Actor bir Character'dir ve oyun içerisinde öldüğü için daha önceden aldığınız referans artık geçersiz bir nesneye işaret ediyor olabilir.
Yani referans değer ile o değeri aldığınızda bir işlem yapacaksanız IsValid kullanmaya gerek yoktur, diğer taraftan bu değeri daha sonra kullanırken IsValid sorgusu mutlaka yapılmalıdır.
Unreal Engine Türkiye topluluğunun çalışmasını sağlamak için isteğe bağlı olarak çerezleri kullanmaktayız.