Функция только помещает 1 объект Arkit Node на сцену (Swift4) - PullRequest
0 голосов
/ 02 февраля 2019

Предполагается, что мой код ниже помещает созданный пользователем объект arkit в сцену, но он не работает.Он размещает 1 объект и не может больше размещать другие объекты.Код, который я закомментировал, помещает шары формы scn идеально и столько, сколько пользовательский запрос, когда вызывается функция.Однако он размещает только 1 созданный пользователем объект, и я хочу разместить несколько объектов.

    func createBall(hitPosition : SCNVector3) {
 //        let newBall = SCNSphere(radius: 0.01)
 //        let newBallNode = SCNNode(geometry: newBall)
//        newBallNode.position = hitPosition
 //        self.sceneView.scene.rootNode.addChildNode(newBallNode)

    let scene = SCNScene(named: "art.scnassets/dontCare.scn")!

    // Set the scene to the view
    sceneView.scene = scene

}

1 Ответ

0 голосов
/ 02 февраля 2019

Когда вы работаете с ARkit, вы работаете только с одной сценой, поэтому, если объект, который вы хотите разместить, загружается из файла .scn, вам нужно загрузить сцену, вынуть узел, которыйВы хотите встать на место (возможно, корневой узел той сцены, которую вы только что загрузили), и поместить ее в .position, как у вас есть пример кода шара, выполняемого в закомментированном коде.

You 'Вероятно, будет полезно загрузить сцену раньше времени и захватить rootNode, чтобы вы могли поместить ее столько раз, сколько захотите, на позиции, где она проверяет попадание на вашем поле.

Обновление: у меня есть только мой iPad, а не ноутбук, и я не могу сразу поделиться игровыми площадками, в которые включен файл .scn.Предполагая, что вы начинаете с файла .SCN, в котором объект, который вы хотите разместить, является корневым узлом, что-то вроде:

guard let loadedScene = SCNScene(named: "something.scn")
  else { fatalError("Unable to load scene file.") }
let node = loadedScene.rootnode // type of this attribute is an SCNNode

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

...