虚幻4 碰撞过滤
原創(chuàng)翻譯,轉(zhuǎn)載請注明出處。(http://blog.csdn.net/sinat_24229853/article/details/51090259)
英文原文:https://www.unrealengine.com/blog/collision-filtering?lang=zh-CN
選擇什么樣的碰撞顯然是很重要的。但它可能會很棘手,而且我們在開發(fā)虛幻4的過程中已經(jīng)花了相當(dāng)長的時(shí)間討論。我們的系統(tǒng)能夠一眼看上去有點(diǎn)復(fù)雜,但它是很強(qiáng)大和一致的,所以我想給一點(diǎn)背景知識關(guān)于怎樣完畢它。
我們會談?wù)撆鲎驳牟煌磻?yīng),我們怎樣使用通道來過濾碰撞,和勾勒出簡單和復(fù)雜碰撞體之間的不同。
堵塞(Blocking)、重疊(Overlapping)和忽略(Ignoring)
首先你要知道的是。當(dāng)你談?wù)撘恍┦聭?yīng)該發(fā)生碰撞,你必須選擇能否夠穿透(penetrate)它。
一面磚墻會堵塞一個(gè)玩家,但一個(gè)觸發(fā)器(trigger)會使它們重疊,同意它們重疊。它們都會產(chǎn)生一個(gè)事件(在UE4中的術(shù)語分別為擊中(Hit)或重疊(Overlap)),只是這是一個(gè)重要的區(qū)別。而其他對象能夠忽略互相碰撞。這給了我們?nèi)N不同的碰撞類型。
追蹤通道和對象通道
下一個(gè)大問題碰撞過濾的核心:“該選擇誰?”是物體決定了什么類型的查詢來碰撞?還是查詢決定了查找什么類型的對象?在不同的情況下,它們都是合理的,所以UE4都支持!
想象一下我們在我們的游戲中定義了兩個(gè)“追蹤通道”。一個(gè)是“可見性”,一個(gè)是“武器”查詢。一面磚墻是用來堵塞它們。一個(gè)灌木堵塞“可見性”可是不堵塞“武器”,一個(gè)防彈玻璃堵塞“武器”可是不堵塞“可見性”。當(dāng)你做這樣的查詢。你指定了單個(gè)追蹤通道。
假設(shè)我們對此改變了,因此游戲代碼必須知道什么對象類型用來查詢,我們游戲可能須要大量的不同類型來處理全部這些場景!它也同意我們之后在內(nèi)容做“現(xiàn)場修復(fù)”,而不是改動(dòng)調(diào)用代碼本身和破壞其他的東西。
然而有一些情況下。你想做只基于它們類型的對象查詢,這就是我們用的對象通道。一個(gè)樣例是一個(gè)爆炸發(fā)生。你想高速查找在一定半徑內(nèi)的“Pawn”或“PhysicsBody”類型的全部對象。
當(dāng)你做這樣的類型的查詢時(shí),你能夠指定多對象通道。
UE4有一些“內(nèi)置”追蹤通道(可見性,攝像機(jī))和對象通道(世界靜態(tài)、世界動(dòng)態(tài)、Pawn、PhysicsBody、Vehicle、可破壞),可是你能夠簡單地通過編輯->項(xiàng)目設(shè)置->碰撞加入你自己的通道。雖然你被限制在32個(gè)通道總數(shù)內(nèi)。
運(yùn)動(dòng)對象間的碰撞
當(dāng)你想處理移動(dòng)對象的時(shí)候,事情變得有一點(diǎn)復(fù)雜。由于這里有許多種組合。在UE4。每一個(gè)對象知道它自己的對象通道。加入一個(gè)列表關(guān)于怎樣響應(yīng)其他對象通道。當(dāng)兩個(gè)物體相交。我們著眼于他們怎樣互相響應(yīng),和採取最小堵塞(least blocking)交互,例如以下圖所看到的:
所以想象以下的場景:
如今這個(gè)角色向前移動(dòng)。
首先它會與灌木叢(Shrub)重疊。玩家是Pawn類型,而且灌木叢想要與它重疊。Shrub是世界靜態(tài)(WorldStatic)類型,而且玩家想要堵塞它。檢查上面那個(gè)表格。終于的結(jié)果是重疊!相同的,磚墻和玩家都想堵塞對方。所以玩家走過灌木叢(產(chǎn)生重疊事件)和它會被墻截停(產(chǎn)生擊中事件)。
假設(shè)你有兩個(gè)玩家。而且一個(gè)想變成“幽靈”,你能夠讓它到Pawn的響應(yīng)頻道從Block改為Ignore。然后他會穿透其他玩家。
碰撞預(yù)設(shè)
雖然這個(gè)系統(tǒng)給了大量控制關(guān)于你的場景中的對象怎樣與其他對象碰撞,實(shí)際上大多數(shù)對象在使用共同的配置。為了讓事情更簡單,UE4有一個(gè)“碰撞預(yù)設(shè)”系統(tǒng)。每一個(gè)預(yù)設(shè)包括了一個(gè)對象類型,和在你的游戲中的對于每一個(gè)追蹤和對象通道的一個(gè)響應(yīng)。
當(dāng)你選擇場景中的一個(gè)對象,你會看到一個(gè)簡單的下拉菜單,同意你選擇一個(gè)預(yù)設(shè):
UE4有幾種內(nèi)置通道(比如不可見墻,物理Actor等等),而且你能夠在項(xiàng)目設(shè)置創(chuàng)建自己的通道。假設(shè)你不想使用預(yù)設(shè),你能夠選擇“自己定義…”然后你能夠改動(dòng)每一個(gè)響應(yīng)。像我們例如以下談?wù)摰?#xff1a;
簡單和復(fù)雜碰撞
最后一件事要理解的是:UE4中的每一個(gè)對象都有“復(fù)雜”和“簡單”碰撞表示。復(fù)雜的碰撞指使用實(shí)際的渲染幾何體碰撞。
這對于武器追蹤來說是最實(shí)用的東西。你能夠射擊你能看得到的東西。雖然你不總是想要碰撞這個(gè),而且每一個(gè)網(wǎng)格也能夠有簡單碰撞表現(xiàn)。其由球體、盒子、膠囊體和凸外殼集合組成。當(dāng)你運(yùn)行碰撞查詢,你告訴UE4你想要碰撞的幾何體。比如,角色移動(dòng),使用簡單幾何體碰撞。來避免在細(xì)節(jié)上的卡住。
編輯器那里有一個(gè)方便的查看模式,讓你看見作為一個(gè)角色會碰撞的東西:
總結(jié)
這里已經(jīng)是全部內(nèi)容。碰撞過濾是一個(gè)令人沉醉的世界!我希望它有助于了解一些我們試圖解決和怎樣利用它來用到你自己的游戲中。有不論什么疑問或評論?我們總是在論壇或者你能夠在推特聯(lián)系我@EpicJamesG。
*我們實(shí)際上在第一個(gè)堵塞碰撞發(fā)生后停止繼續(xù)查找碰撞。這是一個(gè)很好的性能優(yōu)化——想象開了一槍范圍可達(dá)1km的子彈打中了距離你1m的墻,我們省去了999米的工作!
轉(zhuǎn)載于:https://www.cnblogs.com/clnchanpin/p/7236468.html
總結(jié)
- 上一篇: 关于动态修改定时器的时间间隔
- 下一篇: 关于Unity中的本地存储