概述
1. 當遊戲對象運行在場景中進行加速或碰撞時,需要Unity的物理引擎系統爲玩家展示最爲真實的物理效果。
2. Unity內置了一個3D物理引擎和一個2D物理引擎,用法基本相同,但是需要使用不同的組件實現。
物理系統相關組件及參數詳解
Rigidbody組件
1. 爲遊戲對象添加RigidBody組件,實現該對象在場景當中的物理交互。當遊戲對象添加了Rigidbody組件後,遊戲對象便可以接受外力和扭矩力。任何遊戲對象只有在添加RigidBody後纔會受重力影響。當需要通過腳本爲遊戲對象添加作用力以及通過Nvidia物理引擎與其他的遊戲對象發生互動的運算都必須擁有Rigidbody組件。
2. 製作2D遊戲時,應爲Sprite添加Rigidbody2D組件。
3. 添加Rigidbody組件步驟:
4. Rigidbody組件的屬性面板:
(1) Mass:質量。該項用於設置遊戲對象的質量。建議在同一遊戲場景中,遊戲對象之間的質量差值不要大於100倍。
(2) Drag:阻力。當遊戲對象受力運動時受到空氣阻力。0表示沒有空氣阻力,阻力極大時遊戲對象會立即停止運動。
(3) Angular Drag:角阻力。當遊戲對象受扭矩力旋轉時受到的控制阻力。0表示沒有空氣阻力,阻力極大時遊戲對象會立即停止旋轉。
(4) Use Gravity:使用重力。若開啓此項,遊戲對象會受到重力的影響。
(5) Is Kinematic:是否開啓動力學。若開啓此項,遊戲對象將不再受到物理引擎的影響從而只能通過Transform屬性來對其進行操作。該方式適用於模擬平臺的移動或帶有鉸鏈關節鏈接剛體的動畫。
(6) Interpolate:插值。該項用於控制剛體運動的抖動情況,None表示沒有插值,Interpolate表示基於前一幀transform平滑此次Transform,Extrapolate基於下一幀的Transform來平滑此次Transform。
(7) Collision Detection:碰撞檢測。該屬性用於控制避免高速運動的遊戲對象穿過其他的對象而未發生碰撞。
- Discrete離散碰撞檢測,該模式與場景中其他所有的碰撞體進行碰撞檢測,爲默認值。
- Contimuous連續碰撞檢測,該模式用於檢測與動態碰撞體(帶有Rigidbody)碰撞,使用連續碰撞檢測模式來檢測與網格碰撞體(不帶RigidBody)碰撞。其他的剛體會採用離線碰撞模式。此模式使用於那些需要採用連續動態碰撞檢測的對象相碰撞的對象。這對物理性能有很大的影響。
(8) Constraints約束,用於控制對於剛體運動的約束。分別有凍結位置和凍結旋轉,對應的內容將會被凍結無效。
(9) Rigidbody中有額外的屬性Sleeping Mode。其他StartAwake表示最開始就喚醒。StartASleep最開始就休眠,可以通過碰撞喚醒。
CharacterController組件
1. 主要用於對第三人稱或第一人稱遊戲主角的控制,並不適用剛體物理效果。
2. CharacterController組件屬性:
(1) Slope Limit:坡度限制。該參數用於設置所控制的遊戲對象只能爬上角度小於或等於該參數值的斜坡。
(2) Step Offset:臺階高度。該參數用於設置所控制的遊戲對象可以邁上的最高臺階的高度。
(3) Skin Offset:皮膚厚度。該參數決定了兩個碰撞體可以相互滲入的深度。較大的參數值會產生抖動現象,較小的參數值會導致所控制的遊戲對象被卡住,較爲合理的設置是該參數值的Radius值的10%.
(4) MinMoveDistance:用於防止抖動,如果所控制的遊戲對象的移動距離小於該值,則遊戲對象不會移動。
(5) Center:該參數決定了膠囊碰撞體與所控制的遊戲對象的相對位置。
(6) Radius,Height:設置膠囊碰撞體的半徑和高度。
力場工具
1. 力場是一種爲剛體快遞添加作用力的方法,適用於類似火箭發射出來的對象,這些對象在起初並沒有很大的速度但卻是不斷地加速。力場分爲ConstantForce和ConstanctForce2D。
2. ConstantForce添加步驟:
3. ConstanceForce屬性面板:
3. ConstanctForce2D添加步驟:
4. ConstanceForce2D面板屬性:
關節組件
1. 關節組件是模擬物體與物體之間連接關係,關節必須依賴於剛體組件。關節組件可添加到多個遊戲對象當中,關節組件也分爲3D類型的關節和2D類型的關節。
2. 添加3D關節組件:
3. 添加2D關節組件:
各種3D關節類型:
1. Hinge Joint鉸鏈關節。
- 鉸鏈關節由兩個剛體組成,該關節會對剛體進行約束,使得它們好像被連接在一個鉸鏈上那樣運動。
- 它非常適合於對門的模擬,也適用於模型鏈以及鐘擺等物體。
- 單獨的鉸鏈關節要應用到一個對象身上,鉸鏈或繞着Anchor屬性所指定的點來旋轉,按照Axis屬性指定的軸來移動。
- 不用給關節的ConnectedBody屬性添加對象,只有當希望關節的Transform屬性依賴於附加對象的Transform屬性時才爲關機的ConnectedBody屬性來添加對象。
2. Fixed Joint固定關節
- 固定關節用於約束一個遊戲對象對另一個遊戲對象的運動。類似於對象的父子關係,但它是通過物理系統來實現而不是像父子關係那樣是通過Transform屬性來進行約束。
- 固定關節適用於以下的情形:當希望將對象較容易與另一個對象分開時,或者連接兩個沒有父子關係的對象使其一起運動時。
- 使用固定關節的對象自身需要有一個剛體組件。
- 可通過BreakForce和BreakTorque屬性來設置關節的強度極限,如果這些參數不是無窮大而是一個數值的話,那麼當是加到對象身上的力或者轉矩大於此極限值時,固定關節將被銷燬,而對對象的約束也就隨之消失。
3. Spring Joint彈簧關節
- 彈簧關節組件可以將兩個剛體連接在一起,使其像連接着彈簧那樣運動。
- 彈簧關節允許一個電郵剛體的遊戲對象被蠟像一個指定的位置目標,這個目標可以是另一個剛體對象或者世界。當遊戲對象目標位置越來越遠是,彈簧關節會對齊施加一個作用力使其回到目標的原點位置。
4. CharacterJoint角色組件
- 角色關節主要用於表現布娃娃的效果,它是擴展的球關節,可用於限制關節在不同旋轉軸下的旋轉角度。
5. ConfigurableJoint可配置關節
- 可配置關節組件支持用戶自定義關節,它開放了PhysX引擎中的所有與關節相關的屬性。
- 可配置關節有兩類主要的功能:移動/旋轉限制和移動/旋轉加速度。
2D類型關節組件
1. Spring Joint2D
- 2D彈簧關節可將兩個帶剛體d
2. DistanceJoint2D距離關節
- 距離關節將兩個對象以固定的距離連接在一起。
3. HingeJoint2D鉸鏈關節。
- 2D鉸鏈關節組件會對剛體進行約束,使得它們就好像被連接在一個鉸鏈上那樣運動。
4. WheelJoint2D車輪關節。
- 2D車輪關節組件在可以移動的對象上使用模擬滾動輪。
2D PhysicEffectors組件
Point Effector 2D點效應
1. 2D點效應將力應用於吸引或排斥一個點。
Surface Effector 2D表面效應
1. 適用於沿着碰撞體表面的切線力。這種效應可以用來創建恆速電梯和表面移動。
碰撞體組件
1. 3D物理組件和2D物理組件有獨立的碰撞體組件,它要與剛體一起添加到遊戲對象上才能出發碰撞。
2. 在物理模擬中,沒有碰撞體的剛體會彼此互相穿過。
給遊戲對象添加碰撞組件
BoxCollider盒碰撞體
盒碰撞體時一個立方體外形的基本碰撞體。
2. Edit Collider:編輯碰撞體。點擊後面的圖標即可在Scene視圖中編輯碰撞體。
3. Is Trigger:觸發器。選中該項,則該碰撞體可用於觸發事件,同事忽略物理碰撞。
4. Material:材質。採用不同的物理材質類型決定了碰撞體與其他對象的交互形式。
5. Center:碰撞體在對象的局部座標中的位置。
6. Size:碰撞體在X,Y,Z方向上的大小。
Sphere Collider球性碰撞體
球性碰撞體適用於落石,乒乓球等遊戲對象。
CapsuleCollider膠囊碰撞體
膠囊碰撞體由一個圓柱體和與其相連的兩個半球組成。可用在角色控制器或與其他不規則形狀的碰撞結合來使用。
1. Direction:在對象的局部座標中膠囊的縱向方向所對應的座標軸。默認是Y軸。
Mesh Collider網格碰撞體
1. 網格碰撞體通過獲取網格對象並在其基礎上構建碰撞,與在複雜網絡模型上使用基本碰撞體相比,網格碰撞體要更加精細,但會佔用更多的系統資源。
2. 開啓Convex參數的網格體纔可以與其他的網格體發生碰撞。
3. Convex:凸起。若開啓該項,則網格體將會與其他的網格碰撞體發生碰撞。
4. Is Trigger:觸發器。若開啓該項,則此碰撞體可用於觸發事件,並將被物理引擎所忽略。
5. Mesh:獲取遊戲對象的網格並將其作爲碰撞體。
6. 網格碰撞體按照所附加對象的Transform組件屬性來設置碰撞體的位置和大小比例。碰撞網格使用了背面消隱方式,如果一個對象與一個採用背面消隱的網格在視覺上相碰撞的話,那麼他們並不會在物理上發生碰撞。
7. 通常兩個網格碰撞體之間並不會發生碰撞,但所有的網格碰撞體鬥魚基本碰撞體發生碰撞。如果碰撞體的Convex參數設爲開啓,則它也會與其他的網格碰撞體發生碰撞。
8. 只有當網格碰撞體的三角形數量少於255時,Convex參數纔會生效。
WheelCollider車輪碰撞體
1. 車輪碰撞體是一種針對地面車輛的特殊碰撞體。它有內置的碰撞檢測,車輪物理系統以及滑胎摩擦的參考體。
TerrainCollider地形碰撞體
1. 地形碰撞體是基於地形構建的碰撞體。
2. TerrainData:地形數據。採用不同的地形數據決定了地形的外觀。
3. Enable Tree Collider:開啓樹碰撞。
CircleCollider2D
1. 該組件用於給遊戲對象添加圓形的碰撞體。
2. Material:材質,確定碰撞的屬性,如摩擦和反彈。
3. Is Trigger:觸發器。若啓用此項,則此碰撞體用於觸發事件,不會發生任何物理交互。
4. Used By Effector:使用效應器。若啓用此項,就可以使用物理效應器。
BoxCollider2D
1. 該組件用於給2D對象添加矩形的碰撞體。
EdgeCollider2D邊緣碰撞體
1. 邊緣碰撞體的形狀是由一個自由的邊緣線構成的,所以可以通過編輯邊緣碰撞體,達到很精確地適應各種形狀的遊戲對象。
PolygonCollider2D多邊形碰撞體
1. 多邊形碰撞體的形狀是一個自由邊緣線做的部分,所以可以很精確地調整碰撞體的形狀以使用遊戲對象的形狀。多邊形碰撞體通常會自動地適應2D遊戲對象的形狀。
布料組件
1. 布料組件可以模擬類似布料的行爲狀態,比如飄動的旗幟,角色身上的衣服等。
2. 爲遊戲對象添加布料組件:
3. 布料組件包含了SkinnedMeshRenderer蒙皮網格渲染器和Cloth組件。
SkinnedMeshRenderer組件
1. Cast Shadows:投射陰影。
- Off:關閉投射陰影。
- On:開啓投射陰影。
- Two Sided:開啓雙面陰影,模型內外兩側都會產生陰影。
- ShadowsOnly:只投射陰影,模型不會被渲染。
2. Receive Shadows:接收陰影。選中該項,則布料將會接收陰影。
3. Materials:材質。該項用於爲布料選擇材質。
Cloth組件
1. 編輯衣料自身碰撞。
2. 編輯衣料約束