Unity 3D剛體(Rigidbody)

Unity 3D 中的 Rigidbody(剛體)可以爲遊戲對象賦予物理屬性,使遊戲對象在物理系統的控制下接受推力與扭力,從而實現現實世界中的運動效果。

在遊戲製作過程中,只有爲遊戲對象添加了剛體組件,才能使其受到重力影響。

剛體是物理引擎中最基本的組件。在物理學中,剛體是一個理想模型。

通常把在外力作用下,物體的形狀和大小(尺寸)保持不變,而且內部各部分相對位置保持恆定(沒有形變)的理想物理模型稱爲剛體。

在一個物理引擎中,剛體是非常重要的組件,通過剛體組件可以給物體添加一些常見的物理屬性,如質量、摩擦力、碰撞參數等。

通過這些屬性可以模擬該物體在 3D 世界內的一切虛擬行爲,當物體添加了剛體組件後,它將感應物理引擎中的一切物理效果。

Unity 3D 提供了多個實現接口,開發者可以通過更改這些參數來控制物體的各種物理狀態。

剛體在各種物理狀態影響下運動,剛體的屬性包含 Mass(質量)、Drag(阻力)、Angular Drag(角阻力)、Use Gravity(是否使用重力)、Is Kinematic(是否受物理影響)、Collision Detection(碰撞檢測)等。














剛體添加方法

如下圖所示,在 Unity 3D 中創建並選擇一個遊戲對象,執行菜單欄中的 Component→Physics→Rigidbody 命令爲遊戲對象添加剛體組件。


圖片

剛體選項設置

如下圖所示,遊戲對象一旦被賦予剛體屬性後,其 Inspector 屬性面板會顯示相應的屬性參數與功能選項,具體內容如下表所示。


圖片


參 數 含義 功 能
Mass 質量 物體的質量(任意單位)。建議一個物體的質量不要與其他物體 相差100倍
Drag 阻力 當受力移動時物體受到的空氣阻力。0表示沒有空氣阻力,極 大時使物體立即停止運動
Angular Drag 角阻力 當受扭力旋轉時物體受到的空氣阻力。0表示沒有空氣阻力, 極大時使物體立即停止旋轉
Use Gravity 使用重力 該物體是否受重力影響,若激活,則物體受重力影響
Is Kinematic 是否是運動學 遊戲對象是否遵循運動學物理定律,若激活,該物體不再受物理 引擎驅動,而只能通過變換來操作。適用於模擬運動的平臺或 者模擬由鉸鏈關節連接的剛體
Interpolate 插值 物體運動插值模式。當發現剛體運動時抖動,可以嘗試下面的 選項:None(無),不應用插值;Interpolate(內插值),基於上一巾貞 變換來平滑本幀變換;Extrapolate(外插值),基於下一幀變換來 平滑本幀變換
Collision Detection 碰撞檢測 碰撞檢測模式。用於避免高速物體穿過其他物體卻未觸發碰 撞。碰撞模式包括Discrete (不連續)、Continuous (連續)、 Continuous Dynamic (動態連續〉3種。其中,Discrete模式用來 檢測與場景中其他碰撞器或其他物體的碰撞;Continuous模式 用來檢測與動態碰撞器(剛體)的碰撞;Continuous Dynamic模 式用來檢測與連續模式和連續動態模式的物體的碰撞,適用於 高速物體
Constraints 約束 對剛體運動的約束。其中,Freeze Position(凍結位置)表7TC剛體 在世界中沿所選HZ軸的移動將無效,Freeze Rotation(凍結 旋轉)表示剛體在世界中沿所選的X、Y、Z軸的旋轉將無效

實踐案例:剛體測試

案例構思

剛體使物體像現實方式一樣運動,任何物體想要受重力影響,都必須包含一個剛體組件。

利用剛體類遊戲組件,遵循萬有引力定律,在重力作用下,物體會自由落下。

剛體組件還會影響到物體發生碰撞時產生的效果,使物體的運動遵循慣性定律,使其發生碰撞時在運動衝量作用下產生速度。

本案例旨在利用剛體測試重力效果以及碰撞後的交互效果。






案例設計

本案例在 Unity 3D 內創建一個簡單的三維場景,場景內放有 Cube 和 Plane,Plane 用於充當地面,Cube 用於剛體重力測試,然後通過 Ctrl+D 鍵再複製出兩個 Cube 以測試剛體間相互碰撞的效果,如下圖所示。


圖片

案例實施

步驟 1):新建項目,將場景命名爲 Rigidbody。

步驟 2):創建遊戲對象。執行 GameObject→3D Object→Plane 命令,此時在 Scene 視圖中出現了一個平面,在右側的 Inspector 面板中設置平面位置(0,0,-5),如下圖所示。




圖片


步驟 3):創建遊戲對象。在菜單欄中執行 GameObject→Create Other→Cube 命令,在右側的 Inspector 面板中設置立方體的位置(0,5,0),按 F2 鍵可將其重新命名,如下圖所示。



圖片


步驟 4):美化場景。採用紋理貼圖的方法將地面和立方體都貼上紋理。

首先,將資源圖片放置在項目的根目錄 Assets 下,Unity 3D 會自動加載資源。

然後分別選中立方體和平面,將對應的資源圖片分別拖到立方體和平面上即可,效果如下圖所示。







圖片


步驟 5):爲立方體添加剛體屬性。選中立方體,然後執行菜單欄中的 Component→Physics→Rigidbody 命令,當右側的 Inspector 面板中出現了 Rigidbody 屬性面板時,即爲立方體添加了剛體屬性,如下圖所示。



圖片


步驟 6):單擊 Play 按鈕進行測試,發現置於半空中的立方體由於受到重力作用做自由落體運動,掉落到平面上,效果如下圖所示。



圖片


圖片


步驟 7):複製遊戲對象。在 Hierarchy 視圖中,選中 Cube1 後按 Ctrl+D 鍵複製立方體 Cube2 並將其擺放於場景中,在 Inspector 面板中設置新複製的立方體的位置屬性(0.4,0.5,0),按此方法再複製一個立方體 Cube3 斜放於 Cube2 上,設置Cube3 的位置爲(0,1.5,0)。

步驟 8):執行菜單欄的 Component→Physics→Rigidbody 命令爲每一個立方體添加剛體屬性。

步驟 9):單擊 Play 按鈕測試一下,發現最上方立方體進行自由落體運動,撞擊到地面,盒子發生倒塌,效果如下圖所示。







圖片


圖片


步驟 10):創建 JavaScript 腳本文件,輸入下列代碼:

var speed=10;function OnMouseDrag(){transform.position+=Vector3.right*Time.deltaTime*Input.GetAxis("MouseX")*speed;transform.position+=Vector3.up*Time.deltaTime*Input.GetAxis("Mouse Y")*speed;}

步驟 11):將腳本分別連接到 3 個立方體上。

步驟 12):單擊 Play 按鈕測試,效果如下圖所示。




圖片


圖片



圖片


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章