物理引擎控制剛體,剛體上面貼上圖片,所以看起來就是游戲運行起來的狀態
物理世界計算剛體的運行狀態,通過貼圖顯現出運算結果。
一、物理引擎
1:Unity 2D物理引擎基於Box2D封裝而成;
2: 物理引擎模擬物理運動和計算,物理引擎幫助我們計算物體運動;
3: 重力加速度;
4: 碰撞器是物體的形狀 + 碰撞的物理參數(物理材質);
5: 剛體控制物體運動和受力;
二、步驟
1.創建一個Canvas
2.對Canvas進行初始化,記得把Game視圖的分辨率調成和Canvas里面設置的一樣的分辨率640X960
3.創建一個Image的UI節點作為Canvas的子節點,名字叫bg,拖進背景圖片到這個節點中。
4.創建一個Image的UI節點叫做item的子節點,顏色設置為紅色
5.給item節點添加一個Rigidbody 2D的組件,有這個組件后再運行,就會發現這個item節點往下掉
6.Rigidbody 2D的組件的物理參數設置:
UseAutoMass/Mass:根據密度*面積自動計算出來,剛體質量。
Linear Drag: 線性阻尼,空氣阻力等。
Angular Drag: 旋轉阻尼,旋轉阻力。
Gravity Scale: 重力縮放因子,1就是地球上的重力,0.6就是月球上的重力。
Is Kinematic: 靜態剛體和動態剛體,靜態剛體不能動,動態剛體可以動。
Sleep Mode模式: 剛體休眠模式。平時:剛體不受任何外力的情況下默認是進入休眠狀態,不會參與運算,Never Sleep永不休眠,而默認是Start Awake,喚醒時啟動。
Collistion DetectionMode: 剛體碰撞檢測的模式(連續型檢測/離散型檢測)。Discrete離散,Continues連續。
注意:像子彈這種的剛體,Collistion DetectionMode運動模式要選擇Continues連續,這樣才不會因為速度太快,Update時間間隔太短而導致子彈穿透其他剛體,機制是判斷運動期間是否碰撞某個剛體,如果有,就把狀態撥回到兩者碰撞前的狀態,造成撞牆的效果。
其他情況下默認選擇Discrete離散。
7.只是加一個Rigidbody 2D的組件叫剛體,剛體是沒有任何形狀的。沒有形狀的剛體之間是不會產生碰撞效果的,會直接穿過去,像幽靈一樣。兩個物體想要實現碰撞效果,必須都有Box Collider 2D組件,其中任何一個沒有Collider 2D組件都不行,都會直接穿過。
只有Collider 2D組件,沒有Rigidbody 2D組件也是不行的,會相當於一個不受力的靜止的物體,但是會和有Collider 2D組有碰撞效果產生。
我們需要再加一個組件叫做Box Collider 2D(矩形碰撞器),用來表示剛體的形狀,其實還有圓形碰撞器Circle Collider 2D等等各種碰撞器。
綠色方框就是碰撞檢測的有效區域。在Box Collider 2D組件的Size屬性(半徑radius)里面調整大小,一般設置成和圖片大小一樣的大小。
邊界碰撞器
Edge Collider 2D,可以給背景節點bg添加,這樣里面的所有物體就不會跑出這個背景。四條邊的頂點坐標自己手動輸入划分。勾勒出一個長方體的形狀,以點連線,一般要5個點,第一個和最后一個點的坐標一樣。邊界會隨着節點的縮放而縮放。
可以設置物理材質的彈性,這樣其他物體碰撞到的時候會反彈。
多邊形碰撞器
Polygon Collider 2D,也是通過輸入坐標來使得形狀按照坐標的順序勾勒出來,形成多邊形。
注意:一個剛體節點可以帶多個不同的碰撞器,但是記得設置offset區分開來。
Box Collider 2D的物理參數設置:
Material:材質,表示碰撞物體表面的材質,物理材質就是下雨天的地面和水泥地地面的區別
Is trigger:是否僅作為觸發器,當這個屬性打鈎的時候,那么其他剛體碰撞到它的時候,只會觸發碰撞事件,不會有碰撞效果產生,就是說系統檢測到碰撞,但是不在畫面上顯示碰撞的過程,會直接穿過去。可以把一些通過的傳送門,金幣的Is trigger打鈎,
這樣就可以達到我們想要的效果,就是有碰撞事件發生,但是沒有碰撞的畫面效果。
補充:
創建物理材質
右鍵-->create--> Physics2D Material,物理材質有兩個屬性,Bounciness彈力和Friction摩擦力。
創建好物理材質后,需要拖到對應的Box Collider 2D組件的Material屬性中,Bounciness彈力為0.5就可以看出碰撞后物體會反彈一段時間