在我的macCatalyst应用程序中,我尝试制作一个
SCNScene
,用户应该可以在其中四处移动(使用w,a,s和d)但它不起作用。
我要
但我已经迈出第一步失败了
我尝试将 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
}
}
哪个确实有效更好,但感觉不像在场景中四处走动,如果我绕着相机的方向移动,我就会走错方向。
那我该如何解决呢?
感谢您的帮助!
试试这个代码:
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)
}
}