文章

了解2D物理系統

Unity的2D物理系統為2D遊戲提供了專門的物理模擬功能,讓你可以更真實地模擬物體之間的碰撞、重力和運動。與3D物理系統相比,2D物理系統針對2D平面的運動進行了優化,並使用了不同的組件和工具。

1. 2D物理系統的基礎概念

主要組件

  • Rigidbody 2D:用於賦予物體物理屬性,使其能夠受到重力和其他力的影響。
  • Collider 2D:用於定義物體的碰撞範圍。2D物理系統中有多種類型的碰撞體,包括 Box Collider 2DCircle Collider 2DPolygon Collider 2D 等。
  • Physics Material 2D:用來控制物體之間碰撞時的摩擦力和反彈力。

物理屬性

  • 重力(Gravity):2D物理系統中的物體會受到全局的重力影響,這個重力值可以在 Edit > Project Settings > Physics 2D 中進行調整。
  • 質量(Mass):Rigidbody 2D 的質量影響物體的慣性和運動。
  • 阻力(Drag):線性阻力和角阻力分別控制物體在平面上的運動和旋轉的阻力。

2. 創建簡單的2D物理場景

步驟

  1. 設置2D場景
    • 新建一個2D場景,確保你的相機是 Orthographic 模式,這樣更適合2D遊戲的視角。
  2. 添加Rigidbody 2D
    • 創建一個2D物體(例如 Sprite),然後選中該物體,在 Inspector 視圖中點擊 Add Component,選擇 Rigidbody 2D
    • 這個物體現在會受到重力的影響,並且能夠與其他物體發生物理交互。
  3. 添加Collider 2D
    • 在同一個物體上,點擊 Add Component,選擇 Box Collider 2D 或其他合適的碰撞體。
    • 這將定義物體的碰撞邊界,當它與其他碰撞體接觸時,會觸發物理碰撞。

範例

創建一個地面物體,並添加 Box Collider 2D 作為地面碰撞區域;再創建一個球體,添加 Rigidbody 2DCircle Collider 2D,這樣當場景運行時,球體會因重力落到地面並與地面發生碰撞。

3. 了解2D物理屬性

重力和自由落體

  • 當你給一個物體添加 Rigidbody 2D 時,它會自動受到重力的影響。如果不希望物體受到重力影響,可以將 Rigidbody 2D 組件中的 Gravity Scale 設置為0。

摩擦力和反彈力

  • 你可以使用 Physics Material 2D 來設置物體之間的摩擦力和反彈力。
    • 創建一個新的 Physics Material 2D,在 Assets 資料夾中右鍵選擇 Create > Physics Material 2D
    • 設置 Friction(摩擦力)和 Bounciness(反彈力),然後將這個材質應用到 Collider 2D 上。

觸發器(Trigger)

  • Collider 2D 可以設置為觸發器,這樣當其他物體進入或離開碰撞區域時,不會發生物理碰撞,而是觸發 OnTriggerEnter2DOnTriggerExit2D 等事件。

層級碰撞(Collision Layers)

  • 你可以在 Edit > Project Settings > Physics 2D 中設置不同的碰撞層,這樣某些物體之間可以選擇性地忽略碰撞。

4. 編寫簡單的物理腳本

使用C#腳本來控制2D物理行為是遊戲開發中的重要部分。以下是一個簡單的範例,展示如何使用腳本來控制2D物體的移動和物理交互。

範例腳本

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
using UnityEngine;

public class Simple2DPhysics : MonoBehaviour
{
    public float moveSpeed = 5f;
    public float jumpForce = 300f;

    private Rigidbody2D rb;

    void Start()
    {
        rb = GetComponent<Rigidbody2D>();
    }

    void Update()
    {
        // 左右移動
        float move = Input.GetAxis("Horizontal");
        rb.velocity = new Vector2(move * moveSpeed, rb.velocity.y);

        // 跳躍
        if (Input.GetKeyDown(KeyCode.Space))
        {
            rb.AddForce(new Vector2(0f, jumpForce));
        }
    }

    // 當碰撞時觸發
    void OnCollisionEnter2D(Collision2D collision)
    {
        Debug.Log("物體碰撞: " + collision.gameObject.name);
    }
}

步驟

  1. 將腳本附加到物體
    • 將這個腳本附加到你的2D角色物體上。
  2. 設置Rigidbody 2D和Collider 2D
    • 確保物體上已經添加了 Rigidbody 2DCollider 2D,這樣物體才能受到腳本控制並與其他物體發生碰撞。

5. 調試與測試

在設置完2D物理屬性並編寫好腳本後,運行場景並測試物體的行為。你可以調整物體的質量、摩擦力和反彈力,並觀察它們如何影響物體的運動和碰撞。

小結

Unity的2D物理系統為開發2D遊戲提供了豐富的工具和功能。通過理解Rigidbody 2D、Collider 2D和其他物理屬性,你可以創建真實且富有趣味性的物理模擬。編寫腳本來控制物體的運動和交互,可以幫助你構建更複雜的遊戲機制,從而增強玩家的遊戲體驗。

本文章以 CC BY 4.0 授權