Apple Engine

Apple, iPhone, iOS, その周辺のことについて

iOS で SceneKit を試す(Swift 3) その65 - 物理シミュレーションについて

以前、軽く紹介していたが、何回かに分けては詳しく見ていこうと思う。

SceneKit での物理シミュレーションの種類

大きく分けると以下のもの

  • PhysicsWorld
  • PhysicsBody
  • PhysicsField

PhysicsWorld は物理シミュレーションは全体についての設定。
PhysicsBody は物理シミュレーションをさせる対象物。
PhysicsField は風などの外部からの力を指す。

 

その他

物理シミュレーションにはこれ以外にも PhysicsBody の当たり判定を決める PhysicsShape。

PhysicsWorld 内で物が当たった時に作用する PhysicsContact とその Delegate。

車の動きをシミュレーションする PhysicsVehicle。

ヒンジやボールジョイントをシミュレーションする Joint がある。 (ドキュメント内では Bone も Joint と呼んでいる箇所があるのでややこしい)

 

物理シミュレーションの種類

SCNNode であれば全て物理シミュレーションが可能ではあるが、 物理シミュレーションを行う際に状況に合わせた種類を選択する必要がある。

種類は以下の3つ

  • Static
  • Dynamic
  • Kinematic

 

Static

設置した部分に固定され他の PhysicsBody の力や衝突の影響を受けない。
例えば、物理シミュレーションの際に固定されて欲しいと思われる床や部屋などで使用する。

Dynamic

すべての力や衝突の影響を受ける。
物理シミュレーションを有効にするもので、固定させておきたいもの以外はすべてこれを使うことになる。

Kinematic

Static 同様に画面に固定されるが、動いた時に物理シミュレーションが動作する。

例えば、Static で床をつくった場合、物理シミュレーションの判定は最初に設置した状態で当たり判定を固定する。
そのため、Static の場合、床を X 軸 45 度に傾けてもその場から動くことはない。
Kinematic の場合は床を固定させながら、動かしても物理シミュレーションが有効になる。

f:id:x67x6fx74x6f:20170815112308g:plain

テクスチャ画像が間違っているけど Kinetic は Kinematic。

 

負荷的には Dynamic > Kinematic > Static となり、
Static にできるものはできるだけ Static で設定した方が良い。

 

SceneKit での設定値

Scene Editor を開きノードを選択。

Physics Inspector (Command + Option + 6) を開き Physics Body の Type を選択すると

以下のパラメーター設定ができる。

 

Static

f:id:x67x6fx74x6f:20170815105023p:plain

 

Dynamic、Kinematic

f:id:x67x6fx74x6f:20170815105033p:plain

 

今回はここまで。