2

空のノードを作成し、一連のノードを空のノードに追加し、最後にそれをルート ノードに追加しました。その後、以下に示すようにカメラ ノードを作成します。ユーザーがノードをタップするとカメラが移動し、そのノードにフォーカスする機能をシーンキット アプリに追加しようとしています。私の handleTap 関数では、ノードの位置を取得してからカメラをその位置に固定しようとしていますが、機能していません。助言がありますか?

//snippet
    var emptyNode = SCNNode()
    emptyNode.addChildNode(Node)
    rootNode.addChildNode(emptyNode)

    cameraNode.camera = SCNCamera()
    cameraNode.position = SCNVector3(1,0,10)
    rootNode.addChildNode(cameraNode)


     func handleTap(recognizer: UITapGestureRecognizer) {
            let location = recognizer.locationInView(sceneView)
            let hits = sceneView!.hitTest(location, options: nil)

            if let tap = hits.first?.node {
                tappNode = tap
                myScene?.cameraNode.position = tappNode.position
            }

編集

それで、私は少し進歩していますが、まだノードの位置を把握できません。更新されたコードを以下に示します。私が行ったことは、新しいノードを作成し、それにカメラを接続することです。そのノードは、子としてタップ ノードに追加されます。空のノードのコンテキスト内でタップ ノードの位置を取得できません。

let cameraNode = SCNNode()
cameraNode.name = "cameraNode"
cameraNode.camera = SCNCamera()
cameraNode.position = SCNVector3Make(1,0,10)


tappNode.addChildNode(cameraNode)


SCNTransaction.begin()
SCNTransaction.setAnimationDuration(3.0)

SCNTransaction.setCompletionBlock() {
    print("done")
}
sceneView!.pointOfView = cameraNode

SCNTransaction.commit()
4

2 に答える 2

0

私自身のアプリでは、起動時に定義する SCNNode として「デフォルト」の視点が 1 つあります。

デフォルトポイント

ダブルタップすることで、ユーザーはこの視点にリセットされます。

scnView.pointOfView = self.defaultPoint

ここで、scnView はすべてのノードを含むメインの SCNView です。あなたの場合、試行錯誤によって1つ以上のノード固有の視点ノード(ノード自体と同じ座標を持たないことは明らかです)を定義し、シーンビューを設定する必要があると思いますそれに応じた視点。

PS 私のメイン SCNView では、allowsCameraControl が true に設定されています。

于 2016-08-07T15:15:16.553 に答える