Как выбрать отдельный SCNNode SceneKit с помощью пульта на tvOS

Есть ли способ получить движок фокуса на SceneKit? Я пытаюсь создать трехмерную игру, в которой игроки должны выбирать из множества узлов SceneKit, но я не могу найти способ сфокусировать узлы SCNNode.

3 ответа

Решение

SCNNode это модельный объект, а не UIView потомок (или, точнее, не соответствует UIFocusEnvironment), поэтому я не ожидал, что он сможет сфокусироваться.

Итак, как выбрать конкретный SCNNode в SCNView? Шаблон Apple tvOS SceneKit реализует тестирование попаданий, но я не понимаю, как пользователь может выбрать, какую точку на экране он выбирает; нет визуальной обратной связи. Шаблон / демо кажется плохо продуманным. Итак, вот подход, который некоторые коллеги и я обсуждали на днях, но не пытались реализовать.

SCNView может иметь сцену наложения SpriteKit, overlaySKScene, Используйте какой-нибудь жест (возможно, долгое нажатие или кнопку Play), чтобы переключиться в режим "Я собираюсь выбрать узел". Это означает, что курсор появляется на overlaySKSceneи может перемещаться при помощи пальцев на пульте дистанционного управления. Пользователь перемещает курсор по правильному узлу и затем... нажимает? Программа захватывает координаты SpriteKit курсора, переводит их обратно во входные данные теста попадания SceneKit и выполняет проверку попадания на графе сцены.

@vigneshv отмечает, что Apple не поощряет использование курсоров. И это также то, что я услышал от людей, которые посетили Tech Talks на этой неделе. Таким образом, измененным подходом может быть использование невидимого курсора на SKScene, С каждым движением на пульте выполняйте проверку удара. Выделите узел, находящийся под невидимым курсором, но не предпринимайте никаких действий, пока не нажмете трекпад. Когда вы впервые переключаетесь в режим выбора узла, вы даже можете поместить невидимый курсор на самый большой или самый центральный узел, чтобы обеспечить некоторую предварительную визуальную обратную связь.

В зависимости от вашего графа узлов, это может быть сложно. Я мог бы представить генерирование диаграммы Вороного на основе SCNNode центров, и с помощью удаленных жестов для перемещения от многоугольника к многоугольнику.

Еще одна идея: вместо скрытой, подразумеваемой диаграммы Вороного, используйте простую прямоугольную (или шестнадцатеричную?) Сетку для отслеживания курсора. Тестирование попаданий становится более сложным: в каждой ячейке сетки может быть несколько узлов. Но сетка становится легче строить и легче ориентироваться.

Я знаю, что оригинальный вопрос был задан в 2015 году, но Apple представила движок фокуса для SceneKit и SpriteKit в tvOS 11. См. WWDC 2017.

Теперь, кажется, встроенный, наконец?

https://developer.apple.com/documentation/uikit/focus-based_navigation/adding_user-focusable_elements_to_a_tvos_app

«Чтобы сделать узел SceneKit или SpriteKit доступным для фокусировки, установите для свойства focusBehavior узла значение Focusable, как показано ниже.

node.focusBehavior = .фокусируемый

https://developer.apple.com/documentation/spritekit/sknode/controlling_user_interaction_on_nodes

Другие вопросы по тегам