UE4中的簡單碰撞與複雜碰撞

       物體碰撞形狀分爲簡單碰撞和複雜碰撞,簡單碰撞的形狀比較簡單,方便計算,可以由用戶自己添加和編輯,複雜碰撞緊貼物體表面,形狀精確但是計算量大。
       將引擎下的球體模型複製到工程的Content目錄下,雙擊在模型編輯器中觀察簡單碰撞(不太明顯)和複雜碰撞,使用工具欄Collision下拉菜單切換碰撞的顯示與隱藏,如下圖所示


       爲了在碰撞檢測測試中更明顯看到簡單碰撞和複雜碰撞的區別,將球體的簡單碰撞刪除並添加一個簡單的盒子碰撞

       添加完成後,同時顯示簡單碰撞和複雜碰撞,如下圖

       接下來觀察兩種碰撞形狀對鼠標點擊物體檢測的影響,將球體拖入關卡中,並將它的移動屬性改爲可移動(Movable),在關卡藍圖中添加如下代碼(需將鼠標設置爲顯示狀態)

       這裏在鼠標左鍵按下時通過GetHitResultUnderCursorForObjects函數檢測鼠標下的物體(物體類型爲WorldDynamic確保不會檢測到地面,而只會檢測到球體),然後在點擊點畫一個紅點。
        除了GetHitResultUnderCursorForObjects還可以使用更通用的LineTraceForObjects,LineTraceForObjects可以添加忽略的Actor,從而過濾一些物體

      經過多次點擊後可以看到下面的效果


       可以看到TraceComplex爲false時檢測的是物體的簡單碰撞,即使沒有點擊到球體本身檢測到的也是球體。將TraceComplex設置爲true,則只在點擊到球體上時纔會被檢測到。

       簡單碰撞形狀簡單計算效率高所以很多地方都檢測簡單碰撞,比如角色行走時檢測與物體的碰撞,將上面球體的簡單碰撞盒子放大,如下圖

       在BeginPlay事件中綁定球體的撞擊事件

       當角色走到球體的簡單碰撞盒邊緣的時候就走不動了,還觸發OnActorHit事件

       此外物理仿真(SimulatePhysics)以及尋路(AIMoveTo)也是檢測簡單碰撞。
       那麼如何才能使簡單碰撞的形狀也跟複雜碰撞一樣緊貼物體表面呢?除了在模型編輯器中添加形狀並編輯外,更簡單的方法是將CollisionComplexity設置爲UseComplexCollisionAsSimple將複雜碰撞的形狀作爲簡單碰撞的形狀。

       這個設置項有一個限制就是這個物體本身不能使用物理仿真,但是它能做爲非仿真體與其他的仿真物體產生碰撞,具體說明見下圖

       關於碰撞的更多信息參考:
https://docs.unrealengine.com/en-US/Engine/Physics/SimpleVsComplex/index.html
https://docs.unrealengine.com/en-US/Engine/Physics/Collision/Reference/index.html
https://www.unrealengine.com/en-US/blog/collision-filtering

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章