1

ノード (ボール) が移動するたびにカメラが追従するように、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
}
4

1 に答える 1