-
在正常的情況下遊戲內所有會動的物件
都應該帶是有剛體(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都打勾
-
現在它掉落就不會旋轉了