有没有办法在 SceneKit 上获得焦点引擎?我正在尝试构建一个 3d 游戏,其中玩家必须从许多 SceneKit 节点中进行选择,但我找不到让 SCNNodes 焦点的方法。
2 回答
AnSCNNode
是一个模型对象,而不是UIView
后代(或者更准确地说不符合UIFocusEnvironment
),所以我不希望它能够获得焦点。
那么如何选择一个特定SCNNode
的SCNView
?Apple tvOS SceneKit 模板实现了命中测试,但我看不到用户如何选择他们正在选择的屏幕上的哪个点;没有视觉反馈。模板/演示似乎没有经过深思熟虑。所以这是一些同事和我前几天讨论过的一种方法,但没有尝试实施。
可以有一个SpriteKitSCNView
覆盖场景,overlaySKScene
. 使用一些手势(可能是长按或播放按钮)切换到“我要选择一个节点”模式。这意味着光标会出现在 上overlaySKScene
,并且可以通过遥控器上的手指移动来移动。用户将光标移到正确的节点上,然后...点击?程序获取光标的 SpriteKit 坐标,将其转换回 SceneKit 命中测试输入,并在场景图上执行命中测试。
@vigneshv 指出苹果不鼓励使用游标。这也是我从本周参加技术讲座的人那里听到的。因此,修改后的方法可能是在SKScene
. 随着遥控器上的每个动作,执行命中测试。突出显示不可见光标下的节点,但在点击触控板之前不要采取行动。当您第一次切换到节点选择模式时,您甚至可以将不可见的光标放在最大或最中心的节点上,以提供一些初步的视觉反馈。
根据您的节点图,这可能会变得复杂。我可以想象基于SCNNode
中心生成一个 Voronoi 图,并使用远程手势从一个多边形移动到另一个多边形。
另一个想法:使用简单的矩形(或十六进制?)网格来跟踪光标,而不是隐藏的、隐含的 Voronoi 图。命中测试变得更加复杂:每个网格单元下可以有多个节点。但是网格变得更容易构建,也更容易导航。
我知道最初的问题是在 2015 年提出的,但 Apple 在 tvOS 11 中将焦点引擎引入了 SceneKit 和 SpriteKit。请参阅WWDC 2017。