SCNCamera сделан программно не в правильном положении - PullRequest
0 голосов
/ 01 декабря 2018

Я пытаюсь программно создать камеру для моего MainScene.scn файла.

Мне нужно создать камеру в коде, так как я хочу сделать орбиту камеры ,и это единственный способ, которым я могу думать.Я также хотел бы продолжать использовать свой файл сцены.

Это мой код (упрощенный) из моего контроллера представления:

import UIKit
import SceneKit

class GameViewController: UIViewController {

    // MARK: Scene objects
    private var gameView: SCNView!
    private var gameScene: SCNScene!
    private var gameCameraNode: SCNNode!

    // MARK: View controller overrides
    override func viewDidLoad() {
        super.viewDidLoad()

        // Setup game
        initView()
        initScene()
        initCamera()
    }
}

private extension GameViewController {

    // Initialise the view and scene
    private func initView() {
        self.view = SCNView(frame: view.bounds) // Create an SCNView to play the game within
        gameView = self.view as? SCNView // Assign the view
        gameView.showsStatistics = true // Show game statistics
        gameView.autoenablesDefaultLighting = true // Allow default lighting
        gameView.antialiasingMode = .multisampling2X // Use anti-aliasing for a smoother look
    }
    private func initScene() {
        gameScene = SCNScene(named: "art.scnassets/MainScene.scn")! // Assign the scene
        gameView.scene = gameScene // Set the game view's scene
        gameView.isPlaying = true // The scene is playing (not paused)
    }
    private func initCamera() {
        gameCameraNode = SCNNode()
        gameCameraNode.camera = SCNCamera()
        gameCameraNode.position = SCNVector3(0, 3.5, 27)
        gameCameraNode.eulerAngles = SCNVector3(-2, 0, 0)
        gameScene.rootNode.addChildNode(gameCameraNode)
        gameView.pointOfView = gameCameraNode
    }
}

Этот код можно легко вставить для заменыкод контроллера представления по умолчанию.Все, что вам нужно сделать, это добавить MainScene.scn и перетащить в нечто вроде поля.

Если вы попробуете код, камера окажется в неправильном положении.Если я использую те же свойства для камеры в сцене, она работает, но это не то, что я ищу.

Из того, что я прочитал, SceneKit может создать камеру по умолчанию, как сказано здесь и здесь .Однако я устанавливаю свойство pointOfView так, как они сказали в тех ответах, но оно по-прежнему не работает.

Как программно установить камеру в правильное положение на сцене?

1 Ответ

0 голосов
/ 03 декабря 2018

Через некоторое время я обнаружил, что вы можете добавить пустых узлов непосредственно в Scene Builder.Первоначально я хотел только программный ответ, так как я хотел сделать узел орбиты камеры похожим на вопросы, с которыми я связан.Теперь я могу добавить пустой узел, я могу сделать дочерний элемент орбиты камерой.

Для этого не требуется код, если только вы не хотите получить доступ к узлам (например, изменение положения или вращения):

gameCameraNode = gameView.pointOfView // Use camera object from scene
gameCameraOrbitNode = gameCameraNode.parent // Use camera orbit object from scene

Вот шаги для создания узла орбиты:

1) Перетащите его из Objects Library: enter image description here

2) Настройте Scene Graph так:

enter image description here

...