C語言中文網 目錄

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 按鈕測試,效果如下圖所示。

剛體拖拽效果1

剛體拖拽效果2

精美而實用的網站,提供C語言C++STLLinuxShellJavaGo語言等教程,以及socketGCCviSwing設計模式JSP等專題。

Copyright ?2011-2018 biancheng.net, 陜ICP備15000209號

底部Logo