2017-05-12 1 views
0

childnode : boxNode에 액세스하려고 시도하고 팬 제스처 인식기의 입력을 사용하여 노드를 회전하려고합니다. 이 노드를 조작 할 수 있도록이 노드에 어떻게 액세스해야합니까? 큐브 노드를 전역 범위로 선언하고 그런 방식으로 수정해야합니까? 나는 Swift에 익숙하지 않으므로이 코드가 엉성한 것처럼 보일 경우 사과드립니다. 내 panGesture() 함수 내부에 회전 동작을 추가하고 싶습니다. 감사!기하학 자식 노드 Scenekit

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

첫째로 당신은 엑스 코드를 업데이트해야합니다. 사용중인 이전 스위프트 버전 인 것 같습니다. SCNLightTypeAmbient 그래서 당신이 가야 할 방법은 그들을 식별하기 위해 노드 이름을 부여하는 것입니다

스위프트 3의 .ambient입니다 :

myChildNode.name = "FooChildBar"

을하고 당신이 당신의 부모 노드에 호출 할 수 있습니다

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

장면의 루트 노드에서도 사용할 수 있습니다.

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

장면의 모든 노드를보고 이름을 준 노드를 반환합니다.