2D碰撞
在遊戲中,碰撞行為是不可或缺的,而在Unity中,我們可以透過內建的幾個簡單元件配合特定的script method就可以達成.
在碰撞行為中,可以分為主動與被動,就是衝撞與被撞的物件,而這兩者在實作上是有區別的.
在衝撞物件中,我們需要在物件的inspector中加入兩個新元件,Rigidbody2D與Collider,這兩個元件都可以在Physics 2D中找到.
Rigidbody2D:
即2D剛體,用來處理物理運算用的元件,如重力,摩擦係數及碰撞等等.
在剛體中有個Body type,是用來決定碰撞的主要因素,Body type可以分為下列三種:
1. Dynamic:
Dynamic具所有物理特性(Gravity, Forces),可以碰撞任何BodyType,相對的資源消耗 就會比其他body type來得多.
2. Kinematic:
Kinematic不具Gravity及Forces等特性,僅能碰撞Dynamic type,無法碰撞Kinematic 及Static type,所以這種type消耗的資源相對低很多.
3. Static:
Static大概就是等同於沒有剛體,也就是僅能碰撞Dynamic type.
Collider2D:
碰撞器,用來定義可碰撞範圍及碰撞器材質等,在Unity中預設了Box Collider 2D, Circle Collider 2D, Edge Collider 2D及Polygon Collider 2D供開發者使用,而這幾種Collider的差別只在於預設範圍不同而已.
被撞的元件中,僅僅只需要碰撞器及一小段script就可以做到被碰撞的效果,該script method 如下:
(當碰撞器一開始發生碰撞時)
void OnCollisionEnter2D(Collision2D collision){
}
(當碰撞器保持在碰撞狀態)
void OnCollisionEnter2D(Collision2D collision){
}
(當碰撞器剛脫離碰撞時)
void OnCollisionEnter2D(Collision2D collision){
}