UE4碰撞規則詳解(2016.7.12更新)

雖然UE4官方文檔對碰撞好像講的很清楚,但是嘗試的時候發現有很多問題,而且和官方文檔描述的總會出現一些差異,所以自己總結一下所有有關碰撞的內容,持續更新吧~



下面總結了一般的碰撞以及多組件碰撞的一些問題.如果對UE4碰撞一點也不熟悉建議先看看鏈接     UE4碰撞規則詳解(2016.7.12更新)

 如果想進一步深入UE物理引擎相關內容,請參考博客 UE4物理模塊分析 


任意兩個物體有碰撞的條件

①一定是互相設置了Collision Preset。

至少有一個實體開啓了simulate physics。

③該static Mesh必須要有碰撞盒(或者這個Actor有碰撞組件,比如sphere collision)

 對於多組件實體Actor,只要那個組件的父組件開啓了simulate physics,就相當於其子組件也開啓了simulate physics。

如果你滿足了我說的條件還沒有碰撞,請先看看UE4碰撞規則詳解(2016.7.12更新)裏面第8條講解了一些可能遇到的坑。


OnActorHit事件響應條件

①事件所對應的物體必須開啓了Simulating Generates Hit Events。

②而另一個與之碰撞的實體則不是必須要開啓。

③二者至少有一個開啓來simulate physics。

(有些情況下,必須要兩個物體都開啓了Simulating GeneratesHit Events纔可以。具體的情況我正在嘗試總結。對於一個character角色很特別,即使character與被撞到的物體都沒有開啓了Simulating Generates HitEvents,被撞物體的OnActorHit事件也會執行)

 

OnActorOverlap事件響應條件

①兩個發生重疊的實體都要保證開啓了Generate Overlap Events。

②並且在其中任意一個碰撞預設(Collision Presets)裏面對另一方設立了overlap。

(這裏可能官方文檔描述有些區別,大家可以試試)

 

OnActorHit與OnComponentHit

對於存在於編輯器場景的實體,添加的是OnActorHit

藍圖裏面對每個組件添加碰撞都是OnComponentHit事件。

Component一般是Actor的子組件,Actor可以無限制的添加組件


藍圖裏面對每個組件添加碰撞都是OnComponentHit事件

對於OnComponentHit事件,個人角色UE4裏面還是有很多問題,還不清楚是引擎的問題還是其他設置問題,不過有必要總結一下

1.注意父組件與子組件是兩個實體,如果有二者滿足碰撞條件,注意不要讓二者重疊,否則一旦遊戲中產生這個Actor,兩個組件就會以一定的速度相互排斥開來。所以不要隨意開啓組件的simulate physics並且注意各個組件之間的關係。(下圖父組件是CollisionComponent,是一個球形碰撞體;子組件有兩個,sphere是一個static mesh,Capsule是一個膠囊碰撞體)

 

2.一個Actor內的組件之間可以發生碰撞,也可以響應OnComponentHit。同時,OnActorHit事件也會響應。

 

3.對於一個擁有子組件(Component)的父組件,如果這個父組件的simulate physics開啓。那麼只要子組件的Simulating Generates Hit Events開啓,必定會響應子組件的OnCompnentHit事件。

 

4.Actor父組件與子組件的Mobility(可移動性)時刻保持一致。任意一個父組件的simulate physics開啓,其他的組件沒有開啓,則其他組件會與父組件保持相對位置。如果子組件開啓,則只會影響自己(各個組件相互獨立)。

 

5.如果一個Actor的子組件的OnComponentHit事件響應(此時父組件以及其他任意組件都不需要開啓Simulating Generates Hit Events與simulate physics),那麼這個Actor的OnActorHit也會響應。

 

6.在EventGraph中EventHit事件比OnComponentHit響應優先級要高。

 

碰撞藍圖調試問題:

如果一個Actor在場景中對應多個實體,那麼這多個Actor自身EventGraph對應的OnComponentHit事件在調試時只會執行一個Actor的流程。至於執行具體哪個Actor,應該是最新的那個實體,雖然調試只能調試一個,但是其實每個Actor其實都是執行了的。


下面是一些其他的注意事項:

1.你可能會發現有一些Static Mesh可以開啓simulat physics,但是沒有效果(比如例子程序中的Floor_400X400,即使開啓也不會與任何物體碰撞)還有一些Mesh不能進行物理模擬。這樣的話可以雙擊該文件並進入靜態網格編輯器界面,給其添加碰撞盒,左邊紅色框可以給其添加簡單的碰撞盒(最多支持26個碰撞面),添加之後右邊的第二個紅框的Collision Complexity也要有對應的碰撞選項,比如現在是簡單的碰撞,就不要添加圖中的Use Complex Collision As Simple,這樣會碰撞盒無效。


 

上圖中的參數就可以通過靜態網格界面來改變。


2.有關character的複雜碰撞問題

發現對於擁有Mesh等多個Component的藍圖Actor,如果想觸發其他實體的OnActorOverlap必須要使Mesh的Generate OverlapEvents開啓。(當然碰撞預設裏面也要設置)

對於一個character角色很特別,如果想觸發其他實體的OnActorCollision。即使character與被撞到的物體都沒有開啓了Simulating Generates HitEvents,被撞物體的OnActorHit事件也會執行


關於Physics Bodies相關參數意義,可參考鏈接 Physics Bodies(中文翻譯)—UE4官方文檔

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