Yosemite Xcode 6.1 になって正式に SceneKit の物理モデル関連の Swift 向け API が公開になりましたね。 さっそく動かしてみましたのでサンプルを。前々回の記事のように、"Game" プロジェクトテンプレートの GameViewController を書き換える形で実装。 SCNPhysicsShape, SCNPhysicsBody を生成するところ以外は前々回の記事とあまり変わっていませんが、 物が落ちて反発するように床面の SCNFloor を加えています。
以下 GameViewController のコード。
床の生成
25行目
let floorNode = SCNNode()
let floor = SCNFloor() floor.reflectivity = 0.25 floorNode.geometry = floor
reflectiv は床面の光の反射率
let floorShape = SCNPhysicsShape(geometry: floor, options: nil) let floorBody = SCNPhysicsBody(type: .Static, shape: floorShape)
floorNode.physicsBody = floorBody;
ここで先ほどの floor geometry から SCNPhysicsShape を生成します。 SCNPhysicsBody から SCNPhysicsShape を生成し floorNode の physicsBody プロパティにセットします。 重力で落ちてきたものを跳ね返す床面になります。
boxの生成
70行目
let boxShape = SCNPhysicsShape(geometry: box, options: nil) let boxBody = SCNPhysicsBody(type: .Dynamic, shape: boxShape)
node.physicsBody = boxBody;
落とす方の box も同じように SCNPhysicsBody, SCNPhysicsShape を生成して SCNNode の physicsBody プロパティに割り当てます。 床面の時と大体同じです。
わずかなコードで物理モデルを加えられるようになったので、いろいろ表現の幅が広がると良いですね。