如何在 tvOS 上使用遥控器 select 单个 SceneKit SCNNode

How to select an individual SceneKit SCNNode using the remote on tvOS

有没有办法在SceneKit上获取焦点引擎?我正在尝试构建一个 3d 游戏,其中玩家必须 select 来自许多 SceneKit 节点,但我找不到给 SCNNodes 焦点的方法。

SCNNode 是一个模型对象,而不是 UIView 后代(或者更准确地说不符合 UIFocusEnvironment),所以我不希望它能够采取重点。

那么如何在SCNView中select一个特定的SCNNode? Apple tvOS SceneKit 模板实现了命中测试,但我看不到用户如何选择他们在屏幕上 selecting 的点;没有视觉反馈。 template/demo 似乎考虑不周。所以这是我和一些同事前几天讨论的一种方法,但没有尝试实施。

SCNView可以有一个SpriteKit叠加场景,overlaySKScene。使用一些手势(可能是长按或播放按钮)切换到 "I'm about to pick a node" 模式。这意味着光标出现在 overlaySKScene 上,并且可以通过遥控器上的手指移动来移动。用户将光标移到正确的节点上,然后……点击?程序获取光标的 SpriteKit 坐标,将其转换回 SceneKit 命中测试输入,并对场景图执行命中测试。

@vigneshv 指出 Apple 不鼓励使用光标。这也是我从本周参加技术讲座的人那里听到的。因此,修改后的方法可能是在 SKScene 上使用不可见的光标。随着遥控器上的每个动作,执行命中测试。突出显示不可见光标下的节点,但在您点击触控板之前不要采取任何行动。当您第一次切换到 node-select 模式时,您甚至可以将不可见的光标放在最大或最中心的节点上,以提供一些初步的视觉反馈。

根据您的节点图,这可能会变得复杂。我可以想象生成一个基于 SCNNode 中心的 Voronoi 图,并使用远程手势从一个多边形移动到另一个多边形。

还有一个想法:使用简单的矩形(或六角形?)网格来跟踪光标,而不是隐藏的、隐含的 Voronoi 图。命中测试变得更加复杂:您可以在每个网格单元格下有多个节点。但是网格变得更容易构建,也更容易导航。

我知道最初的问题是在 2015 年提出的,但 Apple 在 tvOS 11 中将焦点引擎引入了 SceneKit 和 SpriteKit。 参见 WWDC 2017