前回、SceneKitの3次元世界がどの様に構築されているかを確認しました。

今回は、SceneKitの世界に重力や、あたり判定などの物理シュミレーションを設定していきたいと思います。

球体に重力を設定する

ノードに設定するプロパティのうち、Geometryがカタチや表面の色を、物理情報はPhysicsBodyが担当しています。

ここで球体ノードにPhysicsBodyを設定していきます。

PhysicsBodyで物理情報を設定

PhysicsBodyの種類は下記3つ。

  • Static :  静止物
  • Dynamic : 動く
  • Kinematic : 単体だと動かないけど、他の物体の影響で動く

今回はDynamicを選択します。

その他の物理情報のパラメータも設定していきます。

  • Restitution:  衝突時のエネルギーの増減 (反発)
  • Friction:   摩擦の値を設定。摩擦0だと、滑り続ける。
  • PhysicsShape: 物理シュミレーション時の物体のカタチ (衝突時の当たり判定など)

詳細は公式リファレンスを参照
https://developer.apple.com/documentation/scenekit/scnphysicsbody

床を固定する

球体を受け止める床も設定。
床は動かさないので、PhysicsBodyはStaticにします。

全体のコード

実行

無事、球体ノードに重力が追加されました。

次回は、球体同士がぶつかった際のインタラクションや、音なども設定して、ゲームっぽくしていきたいと思います。