ノード (ボール) が移動するたびにカメラが追従するように、SCNCamera
をにアタッチする必要があります。SCNNode
これまでのところ、物理演算が更新されたときにカメラを常に動かすことで何とかできましたが、あまり効率的ではなく、遅延が発生します。
func physicsWorld(world: SCNPhysicsWorld, didBeginContact contact: SCNPhysicsContact)
{
var cameraP = SCNVector3(x: ball.presentationNode().position.x, y: ball.presentationNode().position.y + 5, z: ball.presentationNode().position.z + 12)
camera.constraints = nil
camera.position = cameraP
camera.constraints = [SCNLookAtConstraint(target: ball)]
}
SCNTransformationConstraint
カメラをノードに「取り付ける」ことができるという情報をいくつか読みましたが、実際の例は見つかりませんでした。
カメラの位置を調整したいので、カメラをノードに取り付けるだけではいけません。
ありがとう。
編集:(口ひげへ)
私はそれを使用してそれをやろうとしました:
optional func renderer(_ renderer: SCNSceneRenderer, didSimulatePhysicsAtTime time: NSTimeInterval)
{
println("called")
}
しかし、次のようなエラーが表示されます。Extraneous '_' in parameter: 'rendered' has no keyword argument name
編集2(作業中):
Moustach のアドバイスにより、この作業を効率的に行うことができました。
カメラの位置が更新されるようになりました:
func renderer(aRenderer: SCNSceneRenderer, didSimulatePhysicsAtTime time: NSTimeInterval)
{
println("called")
}
さらに、SCNNode
その位置を保持するために、カメラ ノードの rootNode として新規作成されました。
カメラのセットアップは次のようになります。
let lookAtBallConstraint = SCNLookAtConstraint(target: ball)
lookAtBallConstraint.gimbalLockEnabled = true
let tempCam = SCNCamera()
tempCam.zFar = 5000
camera = SCNNode()
camera.camera = tempCam
camera.position = SCNVector3(x: 0, y: 0, z: 0)
camera.constraints = [lookAtBallConstraint]
cameraPosition = SCNNode()
cameraPosition.position = SCNVector3(x: 0, y: 5, z: 12)
cameraPosition.addChildNode(camera)
そして、カメラ移動関数は次のようになります。
func renderer(aRenderer: SCNSceneRenderer, didSimulatePhysicsAtTime time: NSTimeInterval)
{
var cameraP = SCNVector3(x: ball.presentationNode().position.x, y: ball.presentationNode().position.y + 5, z: ball.presentationNode().position.z + 12)
cameraPosition.position = cameraP
}