分類:Unity、C#、VS2015
創建日期:2016-05-02
一、簡介
第三人稱視角控制器涉及的相關概念有:
1、剛體(Rigidbody)。
2、碰撞體(Collider)。包括球體碰撞體(Sphere Collider)、箱體碰撞體(Box Collider)、網格碰撞體(Mesh Collider)、物理材質(Physics Material)、鉸鏈關節(Hinge Joint)、彈簧關節(Spring Joint)等。
Unity內置了 NVIDIA PhysX 物理引擎。要控制場景中的物理對象,只需對該對象添加剛體 (Rigidbody)。執行此操作后,該對象就會受重力的影響,而且還可以將該對象與世界坐標系中的其他對象進行碰撞檢測。
二、本章要點
1、剛體
剛體 (Rigidbody) 是以物理方式模擬的對象。可將剛體 (Rigidbody) 用於玩家可以四處推動的事物(例如板條箱或松散對象),或通過編寫腳本向剛體 (Rigidbody) 應用力來直接移動它。
如果對非運動學剛體 (non-Kinematic Rigidbody) 進行變換,則可能不會與其他對象正確碰撞,因此應通過對剛體 (Rigidbody) 應用力和扭矩來移動它。另外,還可以向剛體 (Rigidbody) 添加關節 (Joint) 以使行為更復雜。例如,可以創建具有物理門,或創建具有搖擺鏈條的起重機等。
還可使用剛體 (Rigidbody) 使車輛顯得生動,例如可以用一個剛體、四個車輪碰撞體 (Wheel Collider) 以及一個基於用戶輸入應用車輪旋轉力的腳本來創建汽車。
可以通過從腳本向剛體 (Rigidbody) 應用力來創建飛機。
剛體 (Rigidbody) 最常與基元碰撞體 (Primitive Collider) 結合使用。
重要提示:
- 絕不應一起使用父和子剛體 (Rigidbody)
- 絕不應縮放剛體 (Rigidbody) 的父級
2、運動學剛體 (Kinematic Rigidbody)
運動學剛體 (Kinematic Rigidbody) 是指啟用了“運動學”(is Kinematic) 選項的剛體。運動學剛體 (Kinematic Rigidbody) 不受力、重力或碰撞的影響。它們通過設置變換的位置和旋轉或對其進行動畫處理來驅動,運動學剛體還可以與其他非運動學剛體 (non-Kinematic Rigidbody) 進行交互。
運動學剛體 (Kinematic Rigidbody) 可在與其他剛體 (Rigidbody) 碰撞時正確喚醒它們,並會對置於其上的剛體 (Rigidbody) 應用摩擦力。
下面是針對運動學剛體 (Kinematic Rigidbody) 的幾個使用情況的示例:
(1)希望某個對象處於物理控制下,但是其他情況下則是通過腳本或動畫進行控制。例如,可以創建一個動畫角色,其骨骼附加了與關節 (Joint) 連接的剛體 (Rigidbody),以用作布娃娃。大多數時候該角色處於動畫控制下,此時會創建運動學剛體 (Kinematic Rigidbody)。但是當命中它時,又希望它變為布娃娃並受物理影響。為實現此目的,只需禁用“運動學”選項,即讓“is Kinematic”為false即可。
(2)需要某個對象可以推動其他對象、但不推動自己移動的對象。例如,如果有一個動畫平台,並且要在其上放置一些剛體 (Rigidbody) 箱體,則應使該平台成為運動學剛體 (Kinematic Rigidbody) 而不僅僅是不帶剛體 (Rigidbody) 的碰撞器 (Collider)。
(3)可能需要某個對象有一個經過動畫處理的運動學剛體 (Kinematic Rigidbody),並使用一個可用的關節 (Joint) 讓真實剛體 (Rigidbody) 跟隨其后。
3、靜態碰撞組件 (Static Collider)
靜態碰撞組件 (Static Collider)是具有碰撞體 (Collider) 而不是剛體 (Rigidbody) 的游戲對象 (GameObject)。靜態碰撞體 (Static Collider) 用於始終保持在相同的位置並且永遠不會四處移動的水平幾何結構。
既可以將網格碰撞組件 (Mesh Collider) 添加到已存在的圖形網格,例如使用導入設置 (Import Settings) 生成碰撞體 (Generate Colliders),也可以使用其他碰撞組件。
絕不應逐幀移動靜態碰撞體 (Static Collider),或者說,只要將其設置為靜態碰撞體,它就應該從始至終都不會在場景中移動。否則就會導致物理引擎重新進行內部計算,這種計算成本十分高昂,還會使性能顯著下降。不僅如此,基於靜態碰撞體 (Static Collider) 喚醒其他剛體 (Rigidbody) 的行為未定義,並且移動靜態碰撞體 (Static Collider) 不會對與之接觸的剛體 (Rigidbody) 應用摩擦力。
總之,凡是在場景中移動的碰撞體 (Collider) ,都應該始終將其設置為運動學剛體 (Kinematic Rigidbody),而不是將其設置為靜態碰撞體。