在正常的情況下遊戲內所有會動的物件 都應該帶是有剛體(Rigidbody)的物件
剛體是讓物件可以被物理所影響的元件
它允許遊戲物件能因重力而掉落
並帶有物理屬性像是 質量(Mass)、阻力(Drag)和速度(Velocity)
當我們替一個遊戲物件加上剛體元件 我們稱此遊戲物件為剛體物件
剛體是觸發所有物理行為的基本元件
除此之外該物件也必須有一個碰撞體 才能夠與其它物理物件互動
如果我們的方體物件沒有附有剛體 那它就會一直停留在半空中
替它加上剛體後看看會有甚麼改變
如同加入其他元件的方式
我們可從檢視下方的Add Component加入 或從主選單上的Component加入
你可以在物理類別(Physics)找到剛體元件
現在我們的球體物件會因重力而掉落 也可以被物理引擎所控制
或為它加入任何力量(Force)
剛體有許多選項設定
首先有遊戲物件的重量(Mass) 線性阻力(Drag)和旋轉阻力(Angular Drag)
物件的重量影響物件碰撞的結果
重量輕的遊戲物件碰到重量重的物件時 會產生較小的物理行為
線性阻力決定物件在沒有發生 物理行為下停止移動的速度
可以把它想像成空氣阻力
它是用來計算線性速度的阻力值
旋轉阻力影響遊戲物件停止旋轉的速度 可以決定物件旋轉的快與慢
舉例來說, 當物件加入扭力使物件旋轉 旋轉阻力就會影響扭力並反應在旋轉速度上
剛體的下一個設定選項是重力
只要將重力(Use Gravity)打勾就可以開啟
重力的設定可以在主選單裡的 Edit -> Project Settings -> Physics找到
重力的設定是一個三維的值 而Y軸預設值是重力的實際值 -9.81
因為你可以在此調整全域重力 所以你可以調出不同的環境效果
例如一個低重力的平台 或是將重力放在不同的軸向的解謎遊戲
舉例來說, 我將重力的Z軸設定為5
然後你會看到方體物件飛向Z軸的方向
運動體(Is Kinematic)決定 物件是否會被物理行為影響
一般來說, 物理引擎因為效能因素 所以當場景被載入時
所有靜態物件(沒有附剛體的物件) 只會被物理引擎檢查一次
但當你移動一個靜態物件時
物理引擎就必須要重新檢查所有的 靜態物件來保持物理的準確性
這會使效能大幅下降
要避免這樣的問題可以使用運動體 並透過Translate函式讓運動體移動
這樣物件就可以在不影響自己的情況下 與其他物件產生物理行為
像是打磚塊遊戲裡的移動平台
在這個範例裡 我們的方體物件啟用了重力
當我們開始播放後, 方體物件自然的往下掉落
我們的球體物件 也和方體物件有同樣的設定
如果方體物件關閉了重力就不會往下掉 但它還是會受到其他物件的物理影響
如果我們不想方體物件被其他物件物理所影響 我們可以將Is Kinematic打勾
然後透過不斷的修改座標來移動它的位置
我們建立一個簡單的程式腳本
程式腳本內使用了Translate函式 讓方體物件在每一幀都往前移
你可以看到方體物件在有剛體的情況下 可以移動並與其他物件產生物理行為
因為方體物件不斷的向物理引擎回報座標 而不是要物理引擎重新檢視整個場景
差值(Interpolate)與推算(Extrapolate)設定 是用來解決物件的不規則位移
當你使用剛體進行移動時 產生了些許的不規則位移
這個時候你可以使用差值設定 利用上一幀的位置來進行平順的位移運算
而推算設定是預測 下一幀的座標位置來進行平順的位移
接下來的剛體設定是碰撞的偵測類型
它包括了非連續性(Discrete)
連續性(Continuous) 動態連續性(Continuous Dynamic)
除非你有遇到問題 否則我們建議使用預設的非連續性設定
連續性設定是讓快速移動的物件 能和靜態物件互動的設定
而動態連續性設定是讓快速移動的物件 能和其他動態物件互動
剛體最後的設定叫約束(Constraint)
用來約束剛體元件限制 物件對物理所產生的移動和旋轉行為
舉例來說, 俄羅斯方塊裡的方塊 在掉落到底之前必須是可以旋轉的
這個時侯你就可以利用 約束裡的旋轉設定來進行限制
在這範例裡, 我們的方體物件會往下掉
因為剛體有啟用了重力 所以它掉落的感覺會像這樣
如果我們不希望他在掉落的過程中旋轉 我們可以把Freeze Rotation都打勾
現在它掉落就不會旋轉了