虛幻4 碰撞過濾

虛幻4 碰撞過濾

英文原文:https://www.unrealengine.com/blog/collision-filtering?lang=zh-CN

選擇什麼樣的碰撞顯然是非常重要的,但它可能會非常棘手,而且我們在開發虛幻4的過程中已經花了相當長的時間討論。我們的系統可以一眼看上去有點複雜,但它是非常強大和一致的,所以我想給一點背景知識關於如何完成它。我們會談論碰撞的不同反應,我們如何使用通道來過濾碰撞,和勾勒出簡單和複雜碰撞體之間的不同。

阻塞(Blocking)、重疊(Overlapping)和忽略(Ignoring)
首先你要知道的是,當你談論一些事應該發生碰撞,你必須選擇是否可以穿透(penetrate)它。一面磚牆會阻塞一個玩家,但一個觸發器(trigger)會使它們重疊,允許它們重疊。它們都會產生一個事件(在UE4中的術語分別爲擊中(Hit)或重疊(Overlap)),不過這是一個重要的差別。而其它對象可以忽略互相碰撞。這給了我們三種不同的碰撞類型。

追蹤通道和對象通道
下一個大問題碰撞過濾的核心:“該選擇誰?”是物體決定了什麼類型的查詢來碰撞?還是查詢決定了查找什麼類型的對象?在不同的情況下,它們都是合理的,所以UE4都支持!

想象一下我們在我們的遊戲中定義了兩個“追蹤通道”,一個是“可見性”,一個是“武器”查詢。一面磚牆是用來阻塞它們,一個灌木阻塞“可見性”但是不阻塞“武器”,一個防彈玻璃阻塞“武器”但是不阻塞“可見性”。當你做這種查詢,你指定了單個追蹤通道。

這裏寫圖片描述

如果我們對此改變了,因此遊戲代碼必須知道什麼對象類型用來查詢,我們遊戲可能需要大量的不同類型來處理所有這些場景!它也允許我們之後在內容做“現場修復”,而不是修改調用代碼本身和破壞其它的東西。

然而有一些情況下,你想做僅僅基於它們類型的對象查詢,這就是我們用的對象通道。一個例子是一個爆炸發生,你想快速查找在一定半徑內的“Pawn”或“PhysicsBody”類型的所有對象。當你做這種類型的查詢時,你可以指定多對象通道。

UE4有一些“內置”追蹤通道(可見性,攝像機)和對象通道(世界靜態、世界動態、Pawn、PhysicsBody、Vehicle、可破壞),但是你可以簡單地通過編輯->項目設置->碰撞添加你自己的通道,儘管你被限制在32個通道總數內。

運動對象間的碰撞
當你想處理移動對象的時候,事情變得有一點複雜。因爲這裏有很多種組合。在UE4,每個對象知道它自己的對象通道,添加一個列表關於如何響應其它對象通道。當兩個物體相交,我們着眼於他們如何互相響應,和採取最小阻塞(least blocking)交互,如下圖所示:

這裏寫圖片描述

所以想象下面的場景:

這裏寫圖片描述

現在這個角色向前移動。首先它會與灌木叢(Shrub)重疊。玩家是Pawn類型,並且灌木叢想要與它重疊。Shrub是世界靜態(WorldStatic)類型,並且玩家想要阻塞它。檢查上面那個表格,最終的結果是重疊!同樣的,磚牆和玩家都想阻塞對方,所以玩家走過灌木叢(產生重疊事件)和它會被牆截停(產生擊中事件)。

這裏寫圖片描述

如果你有兩個玩家,並且一個想變成“幽靈”,你可以讓它到Pawn的響應頻道從Block改爲Ignore,然後他會穿透其它玩家。

碰撞預設
雖然這個系統給了大量控制關於你的場景中的對象如何與其它對象碰撞,實際上大多數對象在使用共同的配置。爲了讓事情更簡單,UE4有一個“碰撞預設”系統。每個預設包含了一個對象類型,和在你的遊戲中的對於每個追蹤和對象通道的一個響應。當你選擇場景中的一個對象,你會看到一個簡單的下拉菜單,允許你選擇一個預設:

這裏寫圖片描述

UE4有幾種內置通道(例如不可見牆,物理Actor等等),並且你可以在項目設置創建自己的通道。如果你不想使用預設,你可以選擇“自定義…”然後你可以修改每一個響應,像我們如下談論的:

這裏寫圖片描述

簡單和複雜碰撞
最後一件事要理解的是:UE4中的每個對象都有“複雜”和“簡單”碰撞表示。複雜的碰撞指使用實際的渲染幾何體碰撞。這對於武器追蹤來說是最有用的東西,你可以射擊你能看得到的東西。儘管你不總是想要碰撞這個,並且每個網格也可以有簡單碰撞表現,其由球體、盒子、膠囊體和凸外殼集合組成。當你執行碰撞查詢,你告訴UE4你想要碰撞的幾何體。例如,角色移動,使用簡單幾何體碰撞,來避免在細節上的卡住。

編輯器那裏有一個方便的查看模式,讓你看見作爲一個角色會碰撞的東西:

這裏寫圖片描述

這裏寫圖片描述

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