Gökhan ZER - Unreal Engine C++

14 Ocak 2018 Pazar

UE4 - Collision (çarpışma) ve Çarpışma Filtreleme Hakkında

Oyun ortamında çarpışmaları ayarlamak, hangi objenin nasıl çarpışacağını, dahası çarpışıp çarpışmayacağını belirlemek önemlidir.

Bir çarpışma olayı gerçekleştiğinde ise çarpan object ler içinden sadece bize gereken tipteki object leri seçmek UE4 için çok önemlidir; ama biraz zor / çetrefilli olabilir; sistem başta biraz karmaşık görünebilir; fakat çok güçlü ve kararlıdır.

Şimdi biraz farklı çarpışma (collision) tepkileri / yanıtları (response) üzerinde konuşlacağız; collision ları filitrelemek için kanalları (chennels) nasıl kullanacağımızı ve basit ve karmaşık (simple and complex) çarpışma geometrisi (collision geometry) arasındaki fark hakkında bir özet vereceğiz.
Bloklama (Blocking), üst üste binme (Overlapping), ve görmezden gelme (Ignoring),

Bilmeniz gereken ilk şey, bir şeyin çarpması gerektiğini söylediğinizde, onun içine girip giremeyeceğinizi seçmek zorundasınız.  (ne?) bir duvar bir oyuncuyu Block edecektir ancak bir Trigger Volume i oyuncunun içinden geçmesine izin vererek onu Overlap edecektir. Her iksi de bir olay (Event) yaratır; (UE4 terminolojisinde sırası ile Hit veya Overlap), fakat aralarında önemli bir fark vardır.


Diğer object lerin tipini, üçüncü yanıt (response) tipini vererek, çarpışmayı tamamen yoksayabiliriz  (ignore).



Trace Channel ve Object Channel
çarpışmalarda belli bir tipteki object leri seçebilmek çok önemlidir demiştik;
işte tam bu noktada da çarpışma filitreleme yani collision filtering kavramı işin içine giriyor;

çarpışmalardaki en önemli ikinci şey ise çarpışmaya kimin karar vereceğidir;
belli bir tarz sorgulama (query) ile çarpışacağına (collision) karar veren şey object midir?
veya ne tip bir object i aradığına Query mi karar veriyor?
farklı senaryolarda her ikisi de mantıklı olabilir, zaten UE4 her ikisini de destekler!

hayal edin ki iki Trace kanalı (Trace Channel) tanımladık, bunlardan biri görünürlük (‘Visibility’) için iken, diğeri silah sorguları (‘Weapon Query’) içindir.

Duvar (wall) objesi her ikisini de bloklayacak şekilde kurulur; ancak çalılar görüntüde var iken, yani görüntüyü blokluyor iken silahları bloklamaz. Ayrıca kurşun geçirmez cam (bulletproof glass) da silahları blokluyor iken görünürlüğü (visibility) bloklkamaz. Bu tür bir sorgu (query) yapacaksanız bir single Trace Channel belirtmelisiniz.







eğer burayı değiştirirsem, oyun kodu (game code) tüm bu durumları tek tek işlemek, ne tip object tipini sorguladığını bilmek zorunda olurdu.

ayrıca bu, çağrılan kodun kendisinde değişiklik yaparak olası başka şeyleri de bozmak yerine, içerik (content) içinde sonradan yerinde düzeltmeler ‘spot fixes’ yapmamıza da izin verir. buna kısaca yapısallık sağlar da diyebiliriz sanırım.

nesnelerin (objects) sadece tipleri için sorgulama (query) yaparken oluşabilecek durumlar vardır; ve bu durumlarda ‘Object Channels’ yani nesne kanallarını kullanırız.

örneğin bir patlama olduğunda ve hızlı bir biçimde belli bir yarıçap içindeki tüm Pawn veyahutta ‘PhysicsBody’ tipindeki tüm objeleri bulmak istediğimizde;

buna benzer bir sorgulama (query) yaptığında multiple Object Channels (çoklu nesne kanalı) belirtebilirsiniz.


UE4 dahili olarak (built in) birkaç Trace kanalına (Trace Channel) sahiptir; bunlar: Visibility, Camera dır.

Object Channel ları da: WorldStatic, WorldDynamic, Pawn, PhysicsBody, Vehicle, Destructible;

ve kolaylıkla kendimizinkileri de ekleyebiliriz;

Edit -> Project Settings -> Collision

ancak 32 giriş ile sınırlısınız :)





Hareket eden Nesneler (Moving Objects) Arasındaki Çarpışmalar (Collision)

hareketli nesneler (moving objects) arasındaki çarpışmayı işlemek istediğinizde işler biraz daha karmaşık hale gelebilir; çünkü çok fazla şekilde kombinasyonlar söz konusu olabilir.

UE4 'de her obje kendi obje kanalını (Object Channel) bilmektedir, buna ilaveten diğer obje kanallarına nasıl cevap verdiğinin listesine de sahiptir..

iki obje kesiştiğinde (intersect), birbirine nasıl tepki verdiğine bakarız, en az bloklama etkileşimini alırız; şunun gibi:





yani şekilden anlaşılan o ki iki cismin birbirini overlap etmesi için en azından ikisininde overlap, olarak ayarlanması gerek,

biri ignore olduğunda mutlaka her durum ignore ile sonuçlanıyor;

Blok ise ancak her ikisinin de block olarak ayarlanması ile mümkün olabiliyor;


şimdi aşağıdaki sahneyi bir gözümüzün önüne getirelim:





şimdi player ileri hareket ediyor; ilk olarak ne olacak? adam çalılarla overlap olacak; player bir Pawn türüdür ve çalı ona overlap olmak isteyecektir; çalı (Shrub) bir WorldStatic tipidir; ve Player onu block etmek isteyecektir; şimdi nihai sonucun overlap oluşunu chart üzerine görün!

benzer şekilde duvar ve Payer in ikisi de birbirini Block etmek isteyecektir, dolayısı ile Player çalı üzerinde yürür (Overlap eventi oluştursada yürüyebilir) ancak duvar tarafından durduralacaktır ve Hit eventi meydana gelecektir.




eğer iki oyuncu (player) a sahip isek, ve biri hayalet moda geçmek isterse, tepkilerini değiştirebilir, bunu nasıl yapacak? Pawn kanalını Block tan ignore a alarak tabiki, ve artık o diğer oyuncuların içinden geçmeye başlayabilir;




Collision Presets (Çarpışma Ön Ayar Setleri)

sistem level içindeki objelerin neler ile çarpışacklar üzerinde çok fazla kontrol verse bile, pratikte çoğu obje genel konfigürasyonların içinde kalr.

bu işleri daha kolay hale getirmek için UE4 ün ‘Collision Preset’ sistemi adı verilen bir sistemi vardır.

her bir önküme etiketi (preset) bir Object Tipini (Object Type), ve de oyun içindeki her bir Trace ve Object Channel için bir cevap/tepki (response) içerir.

Level içinde bir objeyi seçtiğimizde bu Preset i seçmemmizi sağlayan basit bir dropdown görürürz:



UE4 bunlardan bir kaçına dahili (built in) olarak sahiptir (örneğin: Invisible Wall, Physics Actor vs.) ve yine Project Settings altında kendininkileri de yaratabilirsin. Eğer hazır bir Preset kullanmak istemezsen ‘Custom…’  seçebilirsin ve her bir tepkiyi (response) i tek tek seçebilirsin:






Simple and Complex Collision (Basit ve Karmaşık Çarpışma)

Anlaşılması gereken en son şey UE4 'teki her nesnenin (object) hem 'karmaşık' (‘complex’) hem de "basit" (‘simple’) çarpışma (collision) temsiline (representation) sahip olabilmesidir.

Karmaşık Çarpışma (Complex Collision), çarpışma için gerçek render geometrisini kullanmak anlamındadır;

bu silah izi (weapon trace) gibi işler için çok kullanışlıdır, gördüğün şeyi tam olarak vurmak istediğin noktada bu çok kullanışlıdır.

yine de her zaman bu tür bir çarpışma istemezsiniz, ve bu yüzden her mesh küre (sphere), kutu (box), kapsül (capsul) ve konveks gövde (convex hull) den oluşan basit collision temsillerine (Simple Collision representation) de sahip olabilir.

Bir çarpışma sorgusu (collision query) gerçekleştirirken, UE4 'e hangi tür geometriyle çarpışmak istediğinizi söylersiniz;

örneğin oyuncu hareketi (Player movement) küçük detaylara çarpıp sıkışmamak için genellikle basit geometri kullanır;

editörümüzde oyuncunun (player) neyle çarpışacağını gösteren kullanışlı bir View Mode vardır:



bu UE4 deki "Collision Filtering"  kurnazlığı dır. Bu, UE4'teki çarpışma filitrelemenin kurnaz dünyasıdır. umarım bu çözmeye çalıştığımız bazı problemleri ve bu kavramı oyunumuzda nasıl kullanacağımızı anlamanıza yardımcı olmuştur.

Not: aslıda ilk bloklanmadan sonra kalan collision lara bakmayı durdururuz; bu bize iyi bi performans sağlar; hayal edin ki 1km uzağa ateş ediliyor ve 1m sonra mermi duvara çarpıyor; 999 metrelik işi yapmamza gerek yoktur :)




Collision Ekleme
peki bu collision lar nasıl ekleniyor? kolay bir yolu var mıdır ? UE4 bize bunun için hazır bir sihirbaz araç sunmuştur: Auto Convex Collision Tool.


Bir Static Mesh e Collision gövdesi (collision hull) Eklemek İçin Auto Convex Collision Tool ‘unu Kullanmayı görelim şimdi:


ilk adımda Static Mesh Editörüne girmeliyiz; Static Mesh Editor ü bize dizi convex gövdeler (hulls) kullanarak collision yaratma yeteneğine sahiptir. UE4 de collision lar mesh lere burada veriliyor; 

herhangi bir mesh i editörden edit moduna aldığnızada zaten bu editör açılıyor; 

sözünü ettiğimiz yardımcı editörün Collision Menüsündeki seçeneklerdir:




menü altında sözünü ettiğim otomatik seçenekler görülüyor;



bu kenarları yuvarlaklaşmış küp muhtemelen 6 DOP lu basit collision (6 DOP Simplified Collision) ile yeterince iyi çalışacaktır, daha detaylı collision a ihtiyacı yoktur; ama gelin daha fazlasını gerektirdiğini varsayalım:

Collision Menu -> Auto Convex Collision i seçerseniz aşağıdaki panel sağ alt kısma gelecektir:



burada,

Max Hulls - collision şeklinin objenin şekline en iyi oturması / uyum sağlaması için HULL sayısını belirler.  (o da ne demekse...)

Max Hull Verts - sözüm ona yukarıdaki hull maksimum kaç vertex (köşe) den oluşabilir? bir anlamda collision un köşegen sayısı; bu değeri artırmak daha kamaşık collison yaratabilmemizi sağlar.

Apply buttonuna basarsanız objeye belirttiğiniz ayarlardaki collision otomtatik olarak eklenir.

Defaults buttonu Max Hulls ve Max Hull Verts değerlerini aşağıdaki resimde görüldüğü gibi resetler.



görebileceğiniz gibi, “auto convex collision” makul derecede iyi iş çıkarabiliyor  :)



Şimdi Projemize Özel Object tipi eklemeyi görelim,

6 object response kanalının, ve 2 trace responce kanalının yeterince ayrıntılı olmadığı bir durum düşünelim;

bu durumda yapmak istediğimiz şey kendi Object ve Trace kanallarımızı tanımlamak olurdu;

Project Settings deki Collision Editor bunun içindir:
Edit Menu -> Project Settings -> Collision:





buradan yeni Object Response ve Trace Response kanalları eklenebilir.

New Object Channel… veya New Trace Channel... a tıklayın. Bir isim verin, 

Default Response i de belirtin  ve son olarak Accept deyin.



18 e kadar Custom Object Response veya Custom Trace Response kanalına (Channel) sahip olabilrisin.




Presets (ön ayar kümeleri)

özel ön ayarlar (Custom Presets) buradan, Preset kategorisi genişletilerek ve  new..  buttonuna tıklanarak ayarlanabilir.



buradan preset inize isim verebilirsiniz; collision u enable veya disable edebilirsiniz; preset object tipini seçin, ve sonunda da seçili object tipi için her bir Response kanalının davranışlını tanımlayın;





bir Static Mesh gövdesinde bir K-DOP collision ekleme:

şimdi collision sihirbazımızı biraz daha farklı şekilde kullanalım; hazır tanımlanmış detay seçeneklerini doğrudan menüden seçerek mesh imize kolayca collision lar giydirelim ve farkı görelim;



Static Mesh Editor içinde Collision menu sü altında ##DOP olarak isimlendirilmiş bir dizi seçenek (options) vardır; bunlar K-DOP basit collision yapıcılarıdır (simple collision generators).

K-DOP bir bounding volume tipidir; K ayrık yönlendirmeli polytope tir; (eksen hizalı düzlemlerin sayısıdır).

temel olarak K eksen hizalı (axis-aligned) düzlemi alır ve onları mesh e olabilecek en yakın mesafeye iter; sonuçta elde edilen şekil collision gövdesi yani hull olarak kullanılır.

Static Mesh Editor in içinde K şunlar olabilir:


10 - 4 kenarı eğimli kutu - X- Y- veya Z hizalı kenarı seçebilirsiniz;

18 - tüm kenarları eğimli kutu;

26 - tüm kenar ve köşeleri eğimli kutu;


aşağıda bir örnek görebilirsiniz. Bu araç, borular, direkler ve parmaklıklarla dolu paketler için oldukça kullanışlıdır:








bir Static Mesh e basit collision (Simple Collision) ekleme:

şimdi sihirbazımızdaki daha kısa yoldan sonuca ulaşmaya yarayan basit collision ekleme kısımlarına bakalım;



bu seçenekler temel collision şekilleri yaratıyor:



collision şekli bir kez yaratılırsa artık istenene pozisyona taşınabilir , döndürülebilir ve scale edilebilir (ölçeklenebilir).

Daha karmaşık satatic mesh şekilleri için bir den fazla collision şekli yaratabilirsiniz.




burada  "W, E, R" klavye tuşları ile Translation, Rotation, ve Scale tool ları arasında geçişler yapabilir ve collision ununuzu istediğini şekle biraz daha optimize edebilirsiniz.


Delete  tuşuna basarak seçili olan Physics Body yani fizik gövdesini kaldırırsınız.


tuşu normal editörde olduğu gibi seçili  Physics Body e odaklanmayı sağlayacak, yani kamerayı ona yaklaştıracak;


Ctrl + Left Click
seçime e bir Physics Body ekleyecek.


Alt + Left  ile sürüklemek ise bir widget manipüle edecek.





Oıyun İçinde Collision u gözden geçirme:

burada oyun esnasında kullanabileceğimiz oyunun collision u hakkında canlı bilgi verebilecek bir kaç consol komutunu inceleyelim.


oyun çalıştır vaziyetteyken,

` (back tick/tilda key) tıkla ve console giriş ekranını ekrana getir;

oraya aşağıdaki komutu girin:

show COLLISION 

bu level içindeki tüm collision modellerini ve blocking volume lerini çizecektir; şunun gibi:




stat game - bu oyun içindeki çeşitli kullanışlı istatistikleri gösterir, ki farklı çarpışma tiplerinin ne kadar sürdüğünü anlarız;








RAYY-Casting Nedir?
ne alaka yaw ? evet ilk başta ben de bu soruyu sordumdu; nedense collision un olduğu yerde bu ray-casting veya ray-tracing konusu da gündeme geliyor; sebebi ise çarpışmaların belirlendiği hesaplandığı durumlarda motor gözle görünmeyen çizgiler uzatarak noktadan çıkan ışının bir engele takılmadan söz konusu hedefe varıp varamadığını belirlemek gerekiyor; işte bu belirleme konusu da ray-casting in konusudur;

peki teknik tanımla ray-casting nedir ve başka ne işlere yarar ?

Işın izleme yöntemi, ışık kaynağından çıkan ışınların fiziksel davranışlarını modellemek üzere kurulmuştur.
görüntü alınan düzlemden geçen ışık ışınlarının izlediği yolu takip ederek  ışığın ne şekilde hareket ettiğini belirleyerek sahnenin görüntüsünü dijital ortamda oluşturma yöntemidir.

Işın izleme yöntemi,, gerçekçi 3B görüntüler üretebilmek için boyama, görünmeyen yüzeylerin kaldırılması, Işının yolunu kontrol etme, renk değerlerinin belirlenmesine vs. ilişkin çözümler sunar.



şimdi collison konumuza devam edelim;


Collision Hakkında Biraz Bilgi
Collision (çarpışma) ve Trace (takip) tepkileri (response) UE4 ün oyun anında (runtime)  collision ve ray-casting i işlemlerinin temelini oluşturur.


Çarpışabilen her object, bir object tipine, ve de diğer tüm object tip leri ile nasıl etkileşime gireceğini tanımlayan bir dizi tepki (reponse) dizisi tanımlamalarına sahip olur.


Çarpışma (collision) veya temas etme / üst üste binme (overlap) olaylarından biri olduğunda,
olaya dahil olan object ler,
bloklama (blocking), üst üste binme (overlapping) veya görmezden gelinme (ignoring) ler tarafından,
birbirlerini etkileyen veya etkilenen olarak ayarlanırlar / işaretlenirler.


Trace Response ları da aynı yolla çalışır; sadece ray-cast in kendisinin   Trace Response tiplerinden biri olarak tanımlanabilmesi bunun dışındadır;

böylelikle Trace Responce larına göre Actor lerin onu block lamasına veya görmezden gelmesine (ignore) olanak tanır;

böylece, Actor ler, Trace Responce lara dayalı olarak onu engellemeye ya da yok saymaya izin verir.





Interactions (etkileşimler)

çarpışmaları halletmek için akılda tutulacak birkaç kural vardır:

Blocking, yani çarpışma şekli  “block”  olarak ayarlanmış iki veya daha fazla actor ün arasında doğal olarak meydana gelir; Fakat, önemlidir ki;  Hit Event inin tetiklenmesi için Simulation Generates Hit Events özelliğinin aktif edilmesi gereklidir. Bu özellik Blueprint lerde, yokedilebilir  (destructable) Actor lerde, tetikleyicilerde (triggers) vs. de kullanılabilir.


Actor leri Overlap ‘a ayarlamak genellikle birbirlerini görmezden geliyormuş gibi görünür; zaten  Generate Overlap Events  olmadan da birşey farketmez.


iki veya daha fazla simulasyon objesinin birbirini blok etmesi için, her ikisinin de object tiplerinin “block” olarak ayarlaması gerekir.

iki veya daha fazla simulasyon objesinin biri bir object e overlap olarak ayarlanmış ise, ve ikinci object de diğerine block olacak şekilde ayarlanmış ise, overlap meydana gelecek ancak block olmayacaktır.

eğer bir object diğerini Block lasa bile, özellikle yüksek hızla gidiyor ise, Overlap eventi oluşabilir.

Bir objenin hem collision hem de overlap event lerine sahip olması önerilen bir durum değildir; buna rağmen mümkündür; ancak manuel ayarlanması gereken çok şey vardır.


eğer bir object ignore olarak ayarlanırsa ve diğeri de overlap olarak ayarlanmışsa, hiçbir overlap event i tetiklenmez.





Level leri test etmek ve world ortamına bakınmak amacıyla:
default Play In Editor kamerası da bir PAWN dır; dolayısı ile block pawn olarak ayarlanmış herhangi bir şey tarafından bloklanabilir.


Simulate in Editor kamerası ise herhangi bir şey tarafından possess edilmeden önce bir Pawn DEĞİLDİR; herhangi bir collision veya overlap event ine sebep olamadan rahatça dolaşabilir.




Genel Collision Etkileşim Örnekleri:

bu etkileşimler (interactions) tüm objelerin Collision Enabled özelliğine sahip olduğuna böylece her şey ile çarpışacak (collide) şekilde ayarlanır.

eğer collision disabled edilirse (devre dışı bırakılırsa), tüm Çarpışma (collison) tepkileri (response) için ignore a ayarlanmış gibi olur.

aşağıdaki kısımda neler olup bittiğini anlatan bir örneğe bakalım:



küre (sphere) bir PhysicsBody dir ve kutu (box) da WorldDynamic dir; ve collision ayarlarını değiştirerek  bir dizi davranışlar elde edebiliriz; şimdi bunlara bir göz atalım:


Collision (çarpışma)

her ikisinin de collision ayarlarını birbirini block layacak şekilde ayarladığımızda, bir çarpışma (collision) elde ederiz; birbiri ile etkileşen objeler elde etmek için harikadır;





SphereCollision Setup:




Wall Collision Setup:




burada sphere (küre) bir PhysicsBody dir ve WorldDynamic e block olarak ayarlanır. (bu örnekte çarptığı duvar oluyor kendileri)

duvar (wall) objemiz bir WorldDynamic tir ve PhysicsBody Actor lerine block olarak ayarlanıyor; (burada bu yukarıdaki küredir)

bu vakada küre duvar basitçe çarpışacaktır; ve çarpışmanın (collision) başka bir bildirimi olmayacaktır.





Çarpışma ve Hit Event lerini Simüle Etme

çarpışma işe yarar, genelde fiziksel etkileşim için gereklidir de, ama bir çarpışma oldu demek istiyorsanız, bir Blueprint ya da kod parçası şöyle tetiklenebilir:





Sphere Collision Setup






Wall Collision Setup



yukarıdaki örnekte, küre (sphere) bir PhysicsBody dir ve yaptığımız ayarlara göre WorldDynamic  objelere karşı block olarak ayarlanmıştır (ki burada bu bizim sevgili duvar objemiz oluyor); fakat, kürenin Simulation Generates Hit i de aktiftir; böylece birşey ile çarpıştığında (collide olduğunda) kendisi için bir event tetikleyecektir;

duvar (wall) ise bir WorldDynamic dir ve yaptığımız ayarlara göre PhysicsBody Actor lerini (ki burada bizim küre oluyor kendisi) block edecektir;

fakat, duvar (wall) Simulation Generates Hit Events i true olarak ayarlanmadığından dolayı kendisi için bir event yaratmayacaktır;

buna karşın,  Simulation Generates Hit Events  i true olarak ayarlanmış küre ise kendisine çarpıştığını bildiren event i üretecektir;

buna rağmen duwar , küre içindeki Blueprint / C++ event lerini ateşleyecekir örneğin ReceiveHit veya OnComponentHit gibi.

Box bir collision için bir event almış ise yine de ateşlemez çünkü gerçekleştiğini kendisine haberdar etmez.

Ayrıca, rigid collision (çarpışma) raporlayan bir object, Allah ne verdi ise her şeyi raporlar; ve hatta bir şeyin üzerinde oturuyor / duruyor ise sürekli spam raporlar da verebilir; yani Blueprint / C++ kod ortamında ne ile çarpışıldığını filitrelerken dikkatli olmakta yarar vardır.





Overlap ve Ignore

tüm kombinasyonlarda  Overlap ve Ignore, Generate Overlap Events disabled olarak ayarlandığında aynı şekilde çalışır;

bu örneğimizde sphere,  kutuyu (box) overlap veya ignore edecek şekilde ayarlandı;





Sphere Collision Setup





Wall Collision Setup




burada küre (sphere), bizim az önceki duvar gibi WorldDynamic Actor ler için overlap a ayarlanıyor; ancak Generate Overlap Events özelliği enabled edilmiyor; küre (sphere) açısından bakıldığında artık hiç bir şeye çarpışması (collision) veya overlap olması söz konusu değildir, ve duvarı tamamen görmezden gelecektir (ignore).

bu duvar (wall) bir WorldDynamic tir ve PhysicsBody Actor leri için block olarak ayarlanmıştır; burada bu Actor bizim küre (sphere) oluyor tabii; Actor lerin birbirini bloke etmesi için her ikisinin de birbirinin object tipine karşılık gelen özelliğini block olarak ayarlaması gerekir; eğer bu olmazsa çarpışma (collision) gerçekleşmeyecektir.



veyaa...


Sphere Collision Setup





Wall Collision Setup




burada küre (sphere) WorldDynamic Actor ler için ignore olarak ayarlanıyor; bu örnekte duvar (wall) oluyor bu; ve böylece artık duvar (wall) içinden geçecekir.

bizim duvar WorldDynamic idi, dolayısı ile onu PhysicsBody Actors lerini block edecek şekilde (yani bizim küreyi) araylar isek, her iki actor de birbirinin object tipini block olarak ayarlaması gerekir; eğer bu yapılmazsa collision gerçekleşmez.






Overlap ve “Generate Overlap Events”

her frame de ateşlenen collision ların aksine, ReceiveBeginOverlap ve ReceiveEndOverlap event leri sadece özel durumlarda ateşlenir.

bir overlap in meydana gelmesi için Actor lerin Generate Overlap Events özelliğinin enable olması gereklidir. Bu performans içindir.

Sphrere ve Box in overlap etmesini istediğimiz bir durumda, ikisinden birini hareket ettirdiğimiz zaman herhangi bir event in ateşlenmesine ihtiyacımız olup olmadığını görmek için bir overlap query si yaparız;

eğer ki Box overlap leri istemiyor ise hareket ettiğinde bir overlap querysi yapmayacağız;

fakat Sphere tarafından overlap edilebiliriz ve böylece sphere in tick lemesi ve de her bir frame de  overpap kontrolü yapması gerekir.






Sphere Collision Setup




Wall Collision Setup




burada sphere WorldDynamic Actor ler için overlap a set ediliyor. bizim duvarımız için ayarlanıyor yani; ve artık bir şeye overlap ederse (üst üste binerse) kendisi için bir event oluşturacaktır.

bzim duvar (wall) ise bir WorldDynamic idi ve PhysicsBody Actor ler için block olarak ayarlanmış idi, (burada bu bizim küre oluyo tabi), her iki actor ün de birbirinin object tipine block olarak ayarlanması gerekiyor; eğer yapmazlardsa collide olamazlar; ancak Overlap burada olacaktır ve event ler sphere ve bokx için ateşlenir.







Collision tepki (Response) Referansı:

bu tepki (response) ayarları, Properties (özellikler) penceresinde Collision özellikleri kategorisi altında “Collision Presets”    başlığının  “Collision Response” kısmı altında detaylı seçenekleri ile bulunmaktadır.


şimdi biraz bu Collision Presets  özelliklerini inceleyelim;





Collision Presets
UE4 deki default collision profilleri ve varsa senin yarattığın çarpışma profillerini içerir;

Project Settings  -> Engine -> Collision ->  Preset   
kısmında bulunurlar;  şimdi bunları inceleyelim:


Default
Static Mesh Editor içindeki Static Mesh e uygulanmış olan ayarları kullanın.


Custom...
seçili objenin instance i için tüm collision ayarlarını bizim yapmamıza izin verir.


NoCollision
hiç bir çarpışma söz konusu olmaz. Hit olayı artık imkansızdır.


BlockAll
default olarak tüm actor leri block e eden WorldStatic object idir; 
tüm yeni özel (custom) kanallar kendi default responce unu kullanacaktır.


OverlapAll
default olarak tüm actor ler ile overlaps olan WorldStatic object idir;
tüm yeni özel (custom) kanallar kendi default tepki (responce) ini kullanacaktır.


BlockAllDynamic
default olarak tüm actor leri block eden WorldDynamic object idir;
tüm yeni custom kanallar kendi default tepki (responce) ini kullanır.


OverlapAllDynamic
default olarak tüm actor ler ile overlap olan WorldDynamic object i dir;
tüm yeni custom kanallar kendi default tepki responce) ini kullanır.


IngoreOnlyPawn
Pawn ları ve araçları (Vehicle) ignore eden WorldDynamic object idir;
tüm diğer kanallar default a ayarlanacaktır. (set edilecektir).


OverlapOnlyPawn
Pawn, Cemara ve Vehicle ile overlap olan WorldDynamic object idir;
tüm diğer kanallar default a set edilecektir.


Pawn
Pawn Object i. Oynanabilen (playable) karakter veya AI nin capsule ü için kullanılabilir.


Spectator
WorldStatic dışındaki tüm diğer object leri görmezden gelen (ignore) Pawn Object itir.


CharacterMesh
Character mesh için kullanılan Pawn objec tidir. tüm diğer kanallar default a ayarlanacaktır.


PhysicsActor
fizik simülasyon actorleridir.


Destructible
yokedilebilir Actor ler.


InvisibleWall
görünmez WorldStatic object idir.


InvisibleWallDynamic
görünmez WorldDynamic object idir.


Trigger
trigger olarak kullanılan WorldDynamic object idir;
tüm diğer kanallar default a ayarlanacaktır.


Ragdoll
Skeletal Mesh Component i simüle eder;
tüm diğer kanallar default a ayarlanacaktır.


Vehicle
araçları (Vehicle), WorldStatic i ve WorldDynamic i bloke eden Vehicle object idir;
tüm diğer kanallar default a ayarlanacaktır.


UI
default olarak tüm diğer actor ler ile overlap olan WorldStatic object idir;
tüm yeni custom kanallar kendi default response ini kullanır.






Collision Enabled
“Collision Enabled” aşağıda listelenen 4 olası durumda olabilir:

No Collision
fiziksel motor (physics engine) içinde bu gövde hiçbir temsile sahip olmayacak;
raycast, sweep, overlap gibi uzaysal sorgular veya rigid body, constraints gibi simulasyon lar için kullanılamaz;
bu ayarlama en iyi performansı verecektir, özellikle de hareket eden objelerde.


Query Only
bu gövde (body), raycast, sweep, ve overlap gibi uzaysal sorgular için kullanılır;
rigid body, constraints gibi simulasyonlar için kullanılamaz;
bu ayarlama karakter hareketi ve fiziksel simulasyona ihtiyaç duymayan objeler için kullanışlıdır;
bazı performans kazançları fizik simülasyon ağacındaki datanın azaltılması ile sağlanır.


Physics Only
bu gövde (body), sadece rigid body, constraints gibi fizik simulation içindir;
raycast, sweep, overlap gibi uzaysal sorgular (query) için kullanılamaz;
bu ayarlama her kemiğinin (bone) tespiti gerekmeyen karakterler üzerindeki simüle edilmiş ikincil (secondary) hareket için kullanışlıdır;
bazı performans kazançları sorgulama (query) ağacı içindeki data nın azaltılması ile sağlanır.


Collision Enabledbu gövde (body) , raycasts, sweeps, overlaps gibi uzaysal sorgulamalar ve rigid body, constraints gibi simülasyonlar için kullanılabilir.









Object Type
hareket ettiğinde ne tipte bir object olduğunu varsaymak gerektiğine karar veren bir enum dir;
bu isteğe bağlıdır, ancak Physics Body ne yapacağına bağlı olarak uygun şekilde ayarlanmalıdır.

WorldStatic
bu hareket etmeyen herhangi bir Actor için kullanılmalıdır;
Static Mesh Actor ler muhtemelen WorldStatic tipi alabilecek iyi bir örnek olabilir.


WorldDynamic
WorldDynamic, bir animasyon veya kod etkisi ile hareket eden / edecek olan Actor lerin tipidir;
kapılar ve asansörler WorldDynamic Actor ler için iyi birer örnekktir.


Pawn
oyuncunun (player) kontrolündeki herhangi bir varlık Pawn tipini almalıdır;
oyuncunun karakteri Pawn Object Type ine ayarlanması gereken iyi bir örnektir.


PhysicsBody
fizik sümulasyonu nedeni ile hareket edecek olan herhangi bir Actor.


Vehicle
araçlar default olarak bu tipi alır.


Destructible
yokedilebilir (Destructible) Mesh ler default olarak bu tipi alır.






Collision Responses
bu ayarlar Physics Body nin tüm diğer Object veya Trace tipleri ile nasıl etkileşeceğini tanımlar;
unutmayın ki bu etkileşim (interaction) aksiyon sonucunu belirleten her iki Physics gövdesi arasında gerçekleşir, böylelikle her iki fizik gövdesinin object tipi ve collision cevapları (Collision Responses) önemlidir; sonuca etki eder.



şimdi bu tepkileri (respoonces) tek tek inceleyelim; diğer Fizik gövdesinin (body) çarpışma Tepkisinden (collision responce) bağımsız olarak, bu fizik body si etkileşimi ignore edecektir.


Overlap
eğer diğer fizik gövdesi, bu fizik gövdesinin object tipine Overlap veya Block a set edilirse, Overlap event i gerçekleşebilir.


Block
eğer diğer fiziksel gövdesi, bu fiziksel gövdenin object tipine block olarak ayarlanırsa Hit event i gerçekleşebilir.








Trace Responses
trace tepkileri (Trace responses) trace ler yani ray cast ler için kullanılır, örneğin Blueprint deki Line Trace by Channel nodu gibi.


Visibility
genel görünürlük test etme kanalı.


Camera
genellikle kamera dan herhangi birşeye trace yapılacağı zaman kullanılır.






Object Responses

WorldStatic
bu fizik body (Physics Body) , WorldStatic Physics Body tipindeki bir obje ile etkileştiğinde nasıl tepki vermeli ?


WorldDynamic
bu Physics Body, WorldDynamic Physics Body tipindeki bir obje ile etkileştiğinde nasıl tepki vermeli?


Pawn
bu Physics Body, Physics Body tipindeki bir object ile etkileştiğinde, nasıl tepki vermelidir?


PhysicsBody
bu Physics Body, "PhysicsBody Physics Body" (höynkk?) tipindeki bir object ile etkileşime girdiğinde nasıl tepki vermelidir?


Vehicle
bu Physics Body, Vehicle Physics Body tipindeki bir obje ile etkileştiğinde nasıl tepki vermeli ?


Destructible
bu Physics Body, Destructible Physics Body Object tipi ile etkileştiğinde nasıl tepki vermeli ?





evet,
çarpışmalar hakkındaki bu yazıyı oluşturmak için bir kaç farklı dökümantasyonu birleştirdim. Konu akışının anlamlı olması için çok fazla uğraşmadım ama geneli okunudğunda bence konu oturacaktır;

faydalı olması dileği ile...