
- Unity 教程
- Unity - 首頁
- Unity - 簡介
- Unity - 安裝和設定
- Unity - 建立精靈
- Unity - 修改精靈
- 變換和物件父子關係
- Unity - 內部資源
- Unity - 儲存和載入場景
- Unity - 基本移動指令碼
- Unity - 理解碰撞
- Unity - 剛體和物理
- Unity - 自定義碰撞邊界
- 理解預製體和例項化
- Unity - 遊戲物件銷燬
- Unity - 協程
- Unity - 控制檯
- Unity - 音訊入門
- Unity - UI入門
- Unity - 按鈕
- Unity - 文字元素
- Unity - 滑塊
- Unity - 材質和著色器
- Unity - 粒子系統
- Unity - 使用資源商店
- Unity 有用資源
- Unity - 快速指南
- Unity - 有用資源
- Unity - 討論
Unity - 剛體和物理
上一章中碰撞的主要問題在於程式碼。我們現在將直接修改遊戲物件的座標值。如果玩家按下按鍵,我們只是向座標新增一個值。我們需要一種方法讓玩家移動,使其能夠正確地對邊界和其他遊戲物件做出反應。
為此,我們需要了解什麼是剛體。剛體是允許遊戲物件對即時物理做出反應的元件。這包括對力、重力、質量、阻力和動量的反應。
您可以透過單擊新增元件並在搜尋欄位中鍵入Rigidbody2D來將剛體附加到您的遊戲物件。

單擊Rigidbody2D會將元件附加到您的遊戲物件。附加後,您會注意到許多新欄位已開啟。

使用預設設定,由於重力,遊戲物件將垂直向下墜落。為避免這種情況,請將重力縮放設定為0。
現在,遊戲執行時不會顯示任何明顯的差異,因為遊戲物件尚未與其物理元件有任何關聯。
為了解決我們的問題,讓我們再次開啟我們的程式碼並重寫它。
public class Movement : MonoBehaviour { public float speed; public Rigidbody2D body; // Update is called once per frame void Update() { float h = Input.GetAxisRaw(“Horizontal”); float v = Input.GetAxisRaw(“Vertical”); body.velocity = new Vector2(h * speed, v * speed); } }
我們可以看到,我們在宣告中建立了對Rigidbody2D的引用,並且我們的更新程式碼作用於該引用而不是物件的變換。這意味著剛體現在承擔了移動的責任。
您可能期望body引用丟擲NullReferenceException,因為我們尚未為其分配任何值。如果您按原樣編譯並運行遊戲,您將在編輯器的左下角看到以下錯誤。

為了解決這個問題,讓我們考慮一下指令碼建立的元件。請記住,公共屬性會在Unity中建立它們自己的欄位,就像我們對speed變數所做的那樣。

將速度調整到更高的值,大約5,然後運行遊戲。
您的碰撞現在將正常工作!
廣告