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