如何在 SceneKit 场景中移动?

问题描述 投票:0回答:1

在我的macCatalyst应用程序中,我尝试制作一个

SCNScene
,用户应该可以在其中四处移动(使用wasd)但它不起作用。 我要

  • 首先在场景中移动的可能性
  • 然后调整到相机朝向的方向

但我已经迈出第一步失败了

我尝试将 SCNView 的视角设置为新的 SCNNode 并尝试移动它:

//initializing the scene
let scene = SCNScene(named: "SceneKit Scene.scn")!
sceneView.scene = scene
//try to set the point of the scene
let node = SCNNode()
node.position = SCNVector3(x: 10, y: 10, z: 10)
sceneView.pointOfView = node

但它什么也没改变。

我也尝试过移动节点(将场景中的所有其他节点都放在里面)

override func pressesBegan(_ presses: Set<UIPress>, with event: UIPressesEvent){
guard let press = presses.first else {return}
guard let key = press.key else {return}
if key.charactersIgnoringModifiers == "w"{
node.position.z += 1
}
}

哪个确实有效更好,但感觉不像在场景中四处走动,如果我绕着相机的方向移动,我就会走错方向。

那我该如何解决呢?

感谢您的帮助!

swift uikit scenekit scncamera
1个回答
0
投票

试试这个代码:

import SceneKit

class GameViewController: NSViewController {        
    var sceneView = SCNView(frame: .zero)
    let scene = SCNScene(named: "ship.scn")!
    let cameraNode = SCNNode()
    
    override func keyDown(with event: NSEvent) {
        for char in event.characters! {
            switch char {
                case "w":
                    cameraNode.position.z -= 0.5
                    print("Camera Moves Forward")
                case "s":
                    cameraNode.position.z += 0.5
                    print("Camera Moves Backward")
                case "a":
                    cameraNode.position.x -= 0.5
                    print("Camera Moves Left")
                case "d":
                    cameraNode.position.x += 0.5
                    print("Camera Moves Right")
                default: break
            }
        }
    }
    override func viewDidLoad() {
        super.viewDidLoad()
        sceneView = self.view as! SCNView
        sceneView.scene = scene
        sceneView.allowsCameraControl = false
        
        cameraNode.camera = SCNCamera()
        cameraNode.position.z = 10.0
        sceneView.pointOfView = cameraNode
        sceneView.scene?.rootNode.addChildNode(cameraNode)
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.