之前我們為在場景增加了遊戲角色以及一些物品,雖然有動畫,但它們還是沒有動起來,甚至沒有像正常物理一樣落下到平台上。這次我們要來了解 Unity 一些物理系統相關的設定。
首先場景中我們可以為人物增加物理,點擊後你會在檢查器中看到,它只有位置、圖片渲染以及動畫3個部件。如之前所說的,GameObject 是由一個或者多個 Component 組成,所以我們現在要為它新增一個 Rigibody 2D 的部件來讓它可以被物理引擎運算。
為了方便觀察,我們可以先調整遊戲鏡頭大小和位置。點擊 Main Camera,然後在檢查器中調整 X Y 位置,以及鏡頭的大小數字讓預覽的畫面能看見完整的遊戲畫面,大小數字越大,畫面就會縮的越小。
在播放遊戲後,如果看不見畫面,可以調整畫面比例和大小。
然後會看見遊戲的人物雖然具有物理了,但它直接掉到畫面以外的地方。
這是因為我們雖然有了物理,但沒有同樣具有物理的地板以停止其下落。再次點擊播放鍵以停止播放,然後我們要為之前繪製的 Tilemap 也增加物理。點擊 Grid 裹面的 Tilemap,然後和人物一樣新增 Rigibody 2D。
如果你播放遊戲,你會發現整個地板都會一起跟著下掉。所以我們需要把它的身體類型改成靜態的 Static。
這裹的3個選項分別為 Dynamic、Kinematic 和 Static,Dynamic 為一般物理物件,會利用 Unity 的物理引擎進行運算,Kinematic 則是需要玩家利用程式語言去設定該物件的移動和速度等物理,能為設計者帶來更高的自由度,但使用難度較高和比較複雜,Static 則是 Unity 物理引擎預設它完全不會移動的物件,如地板、牆壁等。
但即使這樣,現在播放遊戲會發現人物還是沒辦法降落在平台上。因為我們需要為兩者去設計碰撞箱 Hitbox。
碰撞箱是為遊戲裹的角色繪製一個隱形的範圍,可以是不同的形狀,物理引擎會透過檢查碰撞箱之間有沒有接觸而進行物理運算。我們可以先為人物繪製碰撞箱,點擊人物後在新增部件的位置搜尋 Collider,會看見有很多碰撞箱的選擇,這次我們先使用2D盒碰撞器 Box Collider 2D。
然後點擊編緝碰撞箱,再點擊場景上方的Gizmos按鈕,我們就可以在畫面看見人物被一個綠色正方形框著。
對畫面中的綠色框拖拉,或者改變檢查器裹的數值,都可以調整碰撞箱的大小。
另外為了防止角色倒地,我們可以在 Rigibody 的設定中禁止它旋轉。
地板的部份,階層點擊 Tilemap,因為我們是使用 Tilemap 製作場景,我們可以使用磁磚地圖碰撞器 tilemap collider 2d。
現在播放遊戲應該會看到角色能順利站在平台上。