【发布时间】:2019-06-27 12:52:54
【问题描述】:
我很难弄清楚如何让我的 SceneKit 相机围绕游戏中的特定节点运行。
如果我的场景中有一个节点(一艘船)和一个摄像头,一切正常。如果我添加一个额外的节点(一个行星),相机的轴心点似乎会从我的飞船变为我的飞船和行星之间的空间。
我尝试过的事情:
- 在我的相机上设置注视约束(设置为船)
- 将相机位置设置为我的船(它会移动但枢轴点 似乎仍然在两个对象之间)
-
更改相机轴心点
示例:
class TestSceneViewController: UIViewController, SCNSceneRendererDelegate { var scnView: SCNView = SCNView() var scnScene: SCNScene! var cameraNode: SCNNode! var ship: SCNNode! override func viewDidLoad() { super.viewDidLoad() setupView() setupScene() setupCamera()...
func setupView() { // scnView = self.view as! SCNView // retrieve the SCNView scnView = SCNView(frame: view.frame) scnView.showsStatistics = true view.addSubview(scnView) scnView.allowsCameraControl = true scnView.defaultCameraController.interactionMode = .orbitTurntable scnView.defaultCameraController.inertiaEnabled = true scnView.delegate = self scnView.isPlaying = true scnView.loops = true } func setupScene () { scnScene = SCNScene() scnView.scene = scnScene let ships = SCNScene(named: "art.scnassets/simpleshuttle3.scn") ship = ships!.rootNode.childNode(withName: "ship", recursively: true) ship?.position = SCNVector3(x: 0, y: 0, z: 0) scnScene.rootNode.addChildNode(ship!) let planets = SCNScene(named: "art.scnassets/sphere.scn")! if let planet = planets.rootNode.childNode(withName: "Ball", recursively: true){ planet.position = SCNVector3(x: 0, y: 0, z: 40) scnScene.rootNode.addChildNode(planet) } } func setupCamera() { cameraNode = SCNNode() cameraNode.camera = SCNCamera() cameraNode.position = SCNVector3(x: ship.position.x, y: ship.position.y, z: 80) cameraNode.camera?.motionBlurIntensity = 1.0 cameraNode.camera?.automaticallyAdjustsZRange = true scnScene.rootNode.addChildNode(cameraNode) }
【问题讨论】: