2017-05-12 5 views
0

childnode:boxNodeにアクセスしようとしていて、パンジェスチャ認識機能からの入力を使用してノードを回転しようとしています。このノードにアクセスするにはどうしたらいいですか?キューブノードをグローバルスコープで宣言してその方法を変更する必要がありますか?私はスウィフトの新人ですので、このコードがお粗末に見える場合はお詫び申し上げます。 panGesture()関数の内部に回転操作を追加したいと思います。ありがとう!ジオメトリの子ノードのシーンキットへのアクセス

import UIKit 
import SceneKit 

class GameViewController: UIViewController { 

var scnView: SCNView! 
var scnScene: SCNScene! 

override func viewDidLoad() { 
    super.viewDidLoad() 
    setupView() 
    setupScene() 
} 

// override var shouldAutorotate: Bool { 
// return true 
// } 
// 
// override var prefersStatusBarHidden: Bool { 
// return true 
// } 

func setupView() { 
    scnView = self.view as! SCNView 
} 

func setupScene() { 
    scnScene = SCNScene() 
    scnView.scene = scnScene 
    scnView.backgroundColor = UIColor.blueColor() 
    initCube() 
    initLight() 
    initCamera() 
} 

func initCube() { 
    var cubeGeometry:SCNGeometry 
    cubeGeometry = SCNBox(width: 1.0, height: 1.0, length: 1.0, chamferRadius: 0.0) 
    let boxNode = SCNNode(geometry: cubeGeometry) 
    scnScene.rootNode.addChildNode(boxNode) 
} 

func initLight() { 
    let light = SCNLight() 
    light.type = SCNLightTypeAmbient 
    let lightNode = SCNNode() 
    lightNode.light = light 
    light.castsShadow = false 
    lightNode.position = SCNVector3(x: 1.5, y: 1.5, z: 1.5) 
    scnScene.rootNode.addChildNode(lightNode) 
} 

func initCamera() { 
    let camera = SCNCamera() 
    let cameraNode = SCNNode() 
    cameraNode.camera = camera 
    cameraNode.position = SCNVector3(x: 0.0, y: 0.0, z: 5.0) 
    scnScene.rootNode.addChildNode(cameraNode) 
} 

func initRecognizer() { 
    let panTestRecognizer = UIPanGestureRecognizer(target: self, action: #selector(GameViewController.panGesture(_:))) 
    scnView.addGestureRecognizer(panTestRecognizer) 
} 

//TAKE GESTURE INPUT AND ROTATE CUBE ACCORDINGLY 
func panGesture(sender: UIPanGestureRecognizer) { 
    //let translation = sender.translationInView(sender.view!) 
} 

}すべての

答えて

0

まず、あなたのXcodeを更新する必要があります。これはあなたが使用している古いSwiftバージョンのようです。 SCNLightTypeAmbientだからあなたが行くべき道は、それらを識別するためにあなたのノード名を与えることである

スウィフト3で.ambient次のとおりです。

myChildNode.name = "FooChildBar"

をして、あなたがあなたの親ノード上で呼び出すことができます

let theNodeYouAreLookingFor = parentNode.childNode(withName: "FooChildBar", recursively: true)

シーンのルートノードでも使用できます

let theNodeYouAreLookingFor = scene.rootNode.childNode(withName: "FooChildBar", recursively: true)

シーン内のすべてのノードを見て、名前を付けたノードを返します。

関連する問題