說明
- 本系列文章的學習首先要感謝史前圖騰的共享精神,在他的系列文章中有詳細的解釋,但是他的代碼都是Swift寫的.并且代碼的解釋比較少,
- 在這里我提供了demo-OC版供大家參考和學習,基礎知識會一一為大家解釋,但是OC版的demo只提供最終合集,方便一次到位減少打開工程的次數
- demo地址:
OC - 地址
swif-地址
physics body物理形體
Static(靜態的):形體不移動:當其他物體能夠與該類型碰撞時,該類型自身不受任何力和碰撞的影響,該類型用于墻壁和大質量不可移動的巖石;
Dynamic(動態的):可以被力和碰撞影響,用于可移動的桌椅,杯子;
Kinematic(運動學的):類型于靜態形體,不受力和碰撞影響.但你可以移動該類型,移動過程中與其他動態形體碰撞.用于移動的電梯或可以開關的門;
physics shapes物理形狀
物理形狀決定了物理引擎在處理碰撞時的形狀檢測.
為了讓物理模擬器運行的更快,最好將物理形狀設定為簡單的方形,球形或其他系統提供的原始形狀,大略匹配節點外觀就行了
image.png
如果想要添加更多細節到物理形狀,可以手動創建SCNPhysicsShape并傳入,否則可使用nil
node.physicsBody = [SCNPhysicsBody bodyWithType:SCNPhysicsBodyTypeDynamic shape:nil]; // 設置節點中幾何體的 受力狀態
Scene Kit中的scene默認打開了重力,當設定過動態形體后,物體就會受到重力影響下落
forces力
力使用3維向量SCNVector3表示,使用applyForce:<#(SCNVector3)#> atPosition:<#(SCNVector3)#> impulse:<#(BOOL)#>
方法來添加一個力,并指定位置.一個力可以同時影響線速度和角速度.
impluse脈沖狀只作用一次,比如踢一個球,非脈沖狀的則可以持續作用.
Position位置可以影響力的作用效果
image.png
torque力矩
力矩使用4維向量SCNVector4表示,使用applyTorque(_: impulse:)來添加一個力矩,力矩只影響角動量.
x-,y-,z-指定旋轉軸,w-指定旋轉角度也就是大小值
Scene Kit使用國際單位制,因此質量單位是kg千克,力的單位是N牛,脈沖單位是N-s牛秒,力矩單位是N-m牛米.