Unity
Unity 小社課 第3.5堂 講師:貝絲
今天要上的東西
Collider
碰撞器
介紹
- 類型
- Trigger
1.
2.
RigidBody
鋼體
- 介紹
- 屬性
- 程式
3.
Physic Materials 2D
自訂材質
# CHAPTER 2
Collider
碰撞器
# Collider
Collider
-
一種Component
-
可以偵測兩個 Game Object 間的碰撞
-
在場景中以綠色線條顯示
-
當兩個有Collider的物體碰在一起時會有「碰撞」的效果(會被擋下無法前進)
-
最常被拿來用的地方:站立的平台
Collider 的類型
-
有2D、3D形狀
-
2D:
-
矩形、膠囊形、圓形、多邊形、邊、組合
-
-
3D:
-
矩形、膠囊形、球形、網格狀、地形、車輪
-
-
可以善用搜尋功能找到適合的 Collider

# Collider
矩形 Box
一個包住 Game Object 邊界的Collider
最不吃效能


手動編輯 Collider 邊界
物理材質
是否為觸發器
是否為組合用
距離物件中心的偏移
長寬
圓角半徑
覆蓋層

# Collider
膠囊形 Capsule
膠囊狀(?
手動編輯 Collider 邊界
物理材質
是否為觸發器
距離物件中心的偏移
長寬
覆蓋層


直向或橫向

# Collider
圓形 Circle
生成一個圓形包住物件
手動編輯 Collider 邊界
物理材質
是否為觸發器
距離物件中心的偏移
半徑
覆蓋層



# Collider
多邊形 Polygon
生成一個貼合物件邊緣的多邊形
蠻吃效能的
手動編輯 Collider 邊界
物理材質
是否為觸發器
距離物件中心的偏移
覆蓋層


是否為組合用
Draw Mode 為 Tiled 時所有複製的 sprite 都有碰撞器
# Collider
組合 Composite
-
將兩個 Collider 組合成一個 Composite Collider
-
這兩個 Collider 需要有同一個 Rigidbody(之後會教)


+


物理材質
是否為觸發器
距離物件中心的偏移
兩個 Collider組合後的邊界
可以是 Outlines(沿邊)或是 Polygon(多邊形)
會讓 Collider 的頂點變多
圓角
# Collider
Trigger
- 觸發器
- 當你不想要兩個物體相撞時卡住但想要他們碰到的時候回傳訊息那就把 isTrigger 勾起來
- 勾起來後 Collider 就會變成 Trigger

# Collider
Rigidbody
鋼體
Rigidbody
-
使物件被賦予物理特性
-
可以控制:
-
摩擦力、彈跳力
-
碰撞時產生的位移
-
縮放、旋轉
-
-
常用的地方:
-
自由落體
-
物體間的碰撞效果(兩個物體中需要有一個有 Rigidbody 才能有碰撞效果)
-
# Rigidbody
Rigidbody 屬性說明

Rigidbody 類型:
-
Dynamic:
- 有質量和阻力
- 會受到重力和作用力的影響
- 會碰撞
-
Kinematic:
- 無法使用質量相關屬性
- 在非常明確的使用者控制下移動
- 不受重力和作用力的影響,碰撞時不移動
- Static:完全不會動

類型
是否模擬
物理材質
質量
移動阻力
轉動阻力
重力倍數
碰撞偵測模式:
Discrete:兩物體相撞後會穿過或重疊
Continuous:不會互相穿過,會停在最後碰撞的地方
凍結 x/y 軸
凍結 z 軸
# Rigidbody
在 Inspector 中加入 Rigidbody
Rigidbody 常搭配的程式
Rigidbody2D rb; // 宣告一個 Rigidbody -> 要寫在class裡面
rb = GetComponent<Rigidbody2D>(); //添加一個 Rigidbody 組建並儲存到 rb 中
rb.gravityScale = 1.0f; //設定重力影響程度
rb.mass = 1.0f; //設定質量
//MovePosition(Vector2 新的目標位置);
rb.MovePosition(new Vector2(5,10));
//處理碰撞、物理交互時非常有用。相比於 transform.position不會突然打斷物體的運動狀態。
//SetRotation(角度); -> 讓物體指向特定方向
rb.SetRotation(45);
//velocity = new Vector2(xSpeed, ySpeed); -> 調整速度
rb.velocity = new Vector2(5,0);
//AddForce(Vector2 force, ForceMode2D mode = ForceMode2D.Force);
rb.AddForce(Vector2.right * 5, ForceMode2D.Force); //逐步施加的力(持續的推力)
rb.AddForce(Vector2.right * 5, ForceMode2D.Impulse); //瞬間的力(跳躍或子彈發射)
//AddTorque(float 力矩大小, ForceMode2D 模式); -> ForceMode跟AddForce一樣
rb.AddTorque(10f, ForceMode2D.Force);
# Rigidbody
Physic Materials
自訂材質
自訂材質
- Collider 和 Rigidbody 的預設材質會是 None
- 可以自訂材質來做出不同的碰撞或接觸的效果


# Physic Materials
自訂材質
在Project 裡面按右鍵:Create -> 2D -> Physics Material 2D


- Friction:摩擦力
- 範圍在 0(無摩擦)~1(高摩擦) 之間
- Bounciness:彈性效果
- 範圍在 0(無彈性)~1(完全彈性) 之間
# Physic Materials
自訂材質
把新建的材質拖到 Material 的框框

# Physic Materials
結束了!
我的部分
建北電資Unity小社課 第3.5堂
By d11230618陳子毓
建北電資Unity小社課 第3.5堂
- 154