Unity 2D 圖層碰撞關係


建立時間: 2023年4月11日 02:02
更新時間: 2023年9月30日 01:35

說明

最近我在開發遊戲時剛好遇到這個狀況,場景中存在許多球,但我不想球和球之間發生碰撞,但需要和其他遊戲物件發生碰撞,這時就可以使用 Unity 內建圖層設定碰撞關係,解決這個問題。

實例演練

接來將示範,球和自身不發生碰撞,其餘保持預設。

Ball Inspector

上圖可看到球有 Rigidbody 2D 和 Circle Collider 2D,並且沒有勾選 Is Trigger。
點擊紅框 Layer 下拉選項選擇 Add Layer…,新增 Ball 圖層,並且將球設定為此圖層。

點擊菜單 Edit -> Project Settings -> Physics 2D -> Layer Collision Matrix
取消勾選 Ball 對 Ball 的選項

Layer Collision Matrix

以上就已完成設定,若需要測試的話,可以新增兩個球遊戲物件,將它們垂直排列,上面的 Rigidbody 2D Gravity Scale 為 5,下面的 Rigidbody 2D Gravity Scale 為 0,點擊 Play 就可以做碰撞測試了。

節省效能

當你的場景有成千上百個碰撞器的時候,管理圖層碰撞就顯的非常重要,我在開發打磚塊遊戲時,場景中有32x32個磚塊,而每個磚塊其實有兩個碰撞器,磚塊設計是建立一個空的遊戲物件,裡面包含三個子遊戲物件,其中兩個子遊戲物件包含碰撞器,可以假設光磚塊我最多就會存在2x32x32個碰撞器,這些碰撞器在底層的物理運算已經非常龐大,假設磚塊彼此之間本來就不打算發生碰撞,我可以新增兩個圖層 Brick, BrickTrigger,然後設定 Brick 和自身還有 BrickTrigger 不會碰撞,BrickTrigger 也一樣,光這樣的設定就節省了很多物理運算。

如果使用 Profiler 效能分析的話,應該會看到一個 Physics2D.FindNewContacts 就是物理運算,太多碰撞器就可能會導致此運算時間龐大,在 https://forum.unity.com/threads/profiler-physics2d-findnewcontacts.611584 可以看到相關的討論。

觀看次數: 1211
collidecollisionlayerunity
按讚追蹤 Enjoy 軟體 Facebook 粉絲專頁
每週分享資訊技術

一杯咖啡的力量,勝過千言萬語的感謝。

支持我一杯咖啡,讓我繼續創作優質內容,與您分享更多知識與樂趣!