Получить rootNode узла

В проекте ARKit, когда пользователь касается экрана, я хочу получить rootNode элемента, с которым пользователь хочет взаимодействовать.

Проверка жестов и ударов

func screenTapped(_ sender: UITapGestureRecognizer) {
    let hitTestResult = sceneView.hitTest(touchLocation)
    if let result = hitTestResult.first {
        guard let rootNode = getRoot(for: result.node) else {return}
        ...
    }

Рекурсивная функция для получения корневого узла

func getRoot(for node: SCNNode) -> SCNNode? {
    if let node = node.parent {
        return getRoot(for: node)
    }
    else {
        return node
    }
}

Но мне кажется странным, что Swift ничего не предлагает по умолчанию, предлагая рекурсивные методы для дочерних узлов.

  • Есть ли альтернативный/лучший подход к этому?
  • Должен ли я написать эту функцию как расширение для SCNNode?

person dschu    schedule 17.09.2018    source источник
comment
Есть новые решения? Вы используете свой код?   -  person Peter Pohlmann    schedule 16.03.2021


Ответы (1)


Разве это не эквивалентно sceneView.scene.rootNode?

person mnuages    schedule 19.09.2018
comment
Хм, да ты прав. Но это не то, что я пытаюсь архивировать. Что мне нужно, так это корень модели, которая была обнаружена/поражена этой трассировкой лучей. hitTestResult.first возвращает точный узел, который был поражен. - person dschu; 20.09.2018