ue4蓝图碰撞检测的类型_UE4碰撞规则详解
UE4的碰撞設(shè)置在官方的文檔的 物理模擬模塊(鏈接:點(diǎn)擊打開(kāi)鏈接)。但是操作起來(lái)感覺(jué)坑還是比較多,所以這里總結(jié)一下,以防平時(shí)經(jīng)常會(huì)漏掉或忽略某些條件。如果想看關(guān)于碰撞響應(yīng)觸發(fā),可以參考鏈接(?UE4藍(lán)圖碰撞檢測(cè)解析)?如果想進(jìn)一步深入U(xiǎn)E物理引擎相關(guān)內(nèi)容,請(qǐng)參考博客 (UE4物理模塊分析)
現(xiàn)在開(kāi)始講解并總結(jié)一下UE4里面的碰撞規(guī)則:
1.只有擁有Collision屬性的實(shí)體才可以碰撞
每個(gè)實(shí)體Actor,包括static Mesh,sphere,capsule等帶碰撞的組件,在detail細(xì)節(jié)面板都有一個(gè)collision屬性的欄。這個(gè)里面的參數(shù)是控制這些實(shí)體間進(jìn)行碰撞的必要條件。
(注:在UE4里面,所有可以直接放在UE4場(chǎng)景世界里的對(duì)象都是一個(gè)Actor,這個(gè)類型在C++中是類AActor。其本身包含了非常多的屬性,如坐標(biāo),碰撞等必要的特性。繼承于Actor的有Pawn,Character,StaticMeshActor,CameraActor等等,所以在游戲世界存在的實(shí)體都屬于Actor,不過(guò)Actor本身可能還包含組件等更多其他的元素)
2.不同實(shí)體的碰撞通過(guò)碰撞通道來(lái)區(qū)分
在UE4世界里面所有帶碰撞的Actor被分為很多類別,比如WorldDynamic,Worldstatic,Pawn,character等,這些類型被稱為一個(gè)個(gè)collision channel(碰撞對(duì)象通道)。一般來(lái)說(shuō),系統(tǒng)幫你設(shè)置了一些基本的collision?channel。比如一個(gè)設(shè)置為靜止的立方體歸屬于Worldstatic,而一個(gè)設(shè)置為可以動(dòng)的球體歸屬于WorldDynamic。UE4做的非常的靈活的是,這個(gè)通道的類型,你可以任意的設(shè)置與添加,這樣,你就可以根據(jù)你的情況自由的設(shè)置恰當(dāng)?shù)耐ǖ馈8杂傻氖?#xff0c;你可以隨時(shí)改變這個(gè)實(shí)體對(duì)象所屬于的通道類型。
3.每一個(gè)實(shí)體必定有其自身屬于的通道類型
每一個(gè)帶有碰撞的Actor都有一個(gè)自己屬于的通道類型,這個(gè)類型就在下圖的Object Type里面。
4.每個(gè)實(shí)體可以通過(guò)碰撞預(yù)設(shè)來(lái)設(shè)置是否對(duì)其他通道類型實(shí)體產(chǎn)生碰撞
每一個(gè)帶有碰撞的Actor都有一個(gè)Collision Presets(我們稱他為碰撞預(yù)設(shè)),這個(gè)預(yù)設(shè)里面記錄了他與系統(tǒng)設(shè)置里面所有通道類型之間的碰撞關(guān)系。參考下圖,我們可以看到,這個(gè)實(shí)體本身的通道類型是WorldStatic,碰撞預(yù)設(shè)為BlockAll,意思就是與所有的實(shí)體都會(huì)產(chǎn)生碰撞。我們可以看到在下面有一個(gè)列表叫Collision Response,下面所有的對(duì)號(hào)都打在了Block里面,這就表示這個(gè)實(shí)體本身與所有打鉤的對(duì)象都會(huì)產(chǎn)生碰撞。(你會(huì)看到還有一個(gè)trace response,之后再介紹)除了Block,還有Overlap和Ignore,分別是重疊和忽略。
5.碰撞時(shí)相互的,所以兩個(gè)相互碰撞的實(shí)體設(shè)置都要滿足碰撞條件
那是不是下圖的這個(gè)實(shí)體就會(huì)和所有實(shí)體都會(huì)產(chǎn)生碰撞?不是的!我們知道力的作用是相互的,那這里的這個(gè)預(yù)設(shè)也是一個(gè)道理,另一個(gè)物體想與該實(shí)體碰撞,必須在這個(gè)物體所屬的類型里面的Block打上對(duì)號(hào)才可以。這樣二者就會(huì)相互碰撞了。
6.重疊事件也很重要,可以作為場(chǎng)景觸發(fā)器事件
設(shè)置為Ignore和Overlap就不會(huì)產(chǎn)生任何碰撞,但是overlap會(huì)產(chǎn)生overlap事件(藍(lán)圖以及代碼中可以判斷實(shí)體之間是否有重疊,下面有簡(jiǎn)單解釋)
7.trace response的理解
除了碰撞的通道,還有trace通道。trace也是一種碰撞檢測(cè)的方法,向一個(gè)方向位置發(fā)射一個(gè)射線,對(duì)射線擊中的對(duì)象進(jìn)行判斷,進(jìn)而采取進(jìn)一步措施。
所以trace response就是設(shè)置實(shí)體本身發(fā)射的trace會(huì)不會(huì)被其他對(duì)象響應(yīng)。
8.正確設(shè)置staticMesh的碰撞盒類型(這是導(dǎo)致很多奇怪問(wèn)題的重要bug)
每個(gè)staticMesh的碰撞盒必須正確對(duì)應(yīng)他的StaticMeshSettings下的CollisionComplexity屬性(雙擊靜態(tài)網(wǎng)格物體文件即可進(jìn)入編輯器)。這里簡(jiǎn)單介紹一下,每個(gè)靜態(tài)網(wǎng)格實(shí)體都可以在編輯器里面添加碰撞盒,可以給物體設(shè)置簡(jiǎn)單的碰撞盒(球型,盒型,10個(gè)面的碰撞盒等),也可以設(shè)置復(fù)雜的碰撞盒。如果你給該靜態(tài)物體設(shè)置簡(jiǎn)單的碰撞盒,StaticMeshSettings下的CollisionComplexity屬性就應(yīng)該設(shè)置為UseSimpleCollisionAsComplexity。如果設(shè)置了復(fù)雜的碰撞盒(AutoConvexCollision),這個(gè)屬性就該為UseComplexityCollisionAsSimple(設(shè)置為Default也可以)。如果設(shè)置反了,就很容易出現(xiàn)無(wú)法正確模擬物理碰撞的情況。
9.最后,我們看一下圖中的Collision Enabled類型。
正常4.8之前的版本有下面三個(gè)類型選項(xiàng),文檔基本說(shuō)的比較通俗,不過(guò)有兩點(diǎn)要注意
No Collision(無(wú)碰撞)?- 不同該對(duì)象發(fā)生碰撞,無(wú)論是蹤跡碰撞還是物理碰撞。
No Physics Collision(無(wú)物理碰撞)?- 該剛體僅用于射線投射、掃射及重疊。
Collision Enabled(啟用碰撞)?- 該剛體用于物理模擬和碰撞查詢。
a.這個(gè)選項(xiàng)類似一個(gè)總開(kāi)關(guān),如果這個(gè)地方選擇了No Collision,那么不管前面怎么設(shè)置通道,也不會(huì)產(chǎn)生任何碰撞事件
b.這個(gè)里面No Physics Collision表示不進(jìn)行物理模擬,就是說(shuō)在這個(gè)實(shí)體移動(dòng)時(shí)不會(huì)產(chǎn)生任何碰撞,但是各種重疊的事件還是會(huì)觸發(fā)的。當(dāng)這個(gè)實(shí)體靜止的時(shí)候,與Collision Enabled的效果是完全一樣的,可以碰撞也可以觸發(fā)各種事件。
4.9之后變?yōu)橄旅娴乃膫€(gè)類型,如果你在官方文檔找不到,切換成英文再查一下就能看到了。(中文文檔總是更新的比較慢)
No Collision
No collision is enabled for this body.
Query Only
This body is used only for collision queries (raycasts, sweeps, and overlaps).
Physics Only
This body is used only for physics collision.
Collision Enabled
This body interacts with all collision (Query and Physics).
其實(shí)4.9之后把原來(lái)的No Physics Collision分成了Query Only 和 Physics Only,也就是說(shuō)Query Only可以進(jìn)行各種trace,sweep,Overlap事件的觸發(fā),但是不會(huì)進(jìn)行物理模擬,簡(jiǎn)單的講就是運(yùn)動(dòng)時(shí)不會(huì)產(chǎn)生任何碰撞。但是靜止時(shí)是由碰撞的。
Physics Only表示只能進(jìn)行物理碰撞與運(yùn)動(dòng)模擬,但是不會(huì)觸發(fā)任何事件。
注意:如果這里設(shè)置為No Collision,那么即使在Actor對(duì)象開(kāi)啟了simulatePhysics(開(kāi)啟物理模擬)也不會(huì)有效,也就不會(huì)受到重力而下落
其他注意內(nèi)容:對(duì)于每個(gè)StaticMesh類型的Actor(即存在于場(chǎng)景中的實(shí)體),他的的detail面板下StaticMesh欄下有一個(gè)BlockingVolum,功能是創(chuàng)建一個(gè)物理體積。所謂物理體積就是一個(gè)游戲不可見(jiàn)的但是真實(shí)存在的實(shí)體,可以用于觸發(fā)事件等。BlockingVolum就是一個(gè)帶碰撞盒的體積,點(diǎn)擊這個(gè)按鈕,就是給這個(gè)實(shí)體創(chuàng)建一個(gè)單獨(dú)的碰撞盒體積。按住Alt+C可以隱藏或者顯示碰撞盒。這個(gè)體積可以用于場(chǎng)景中用畫(huà)刷刷出來(lái)沒(méi)有碰撞盒的靜態(tài)物體,但是也需要碰撞的物體。
原文鏈接(轉(zhuǎn)載請(qǐng)標(biāo)明):http://blog.csdn.net/u012999985/article/details/51290096
總結(jié)
以上是生活随笔為你收集整理的ue4蓝图碰撞检测的类型_UE4碰撞规则详解的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: C++ 圆的面积
- 下一篇: Java爬虫:大量抓取二手房信息并存入云