如何在 Swift 中将 SKScene 覆盖在 SCNScene 上?

How can I overlay a SKScene over a SCNScene in Swift?

网上有一些overlay的教程,都是用的 overlaySKScene 在某个时候。

这在我的项目中是不可能的,因为(我猜)我的观点在任何时候都不使用 SCNView 的构造函数(overlaySKScene 是其中的一部分)。

在ViewController的viewDidLoad中,基本上只创建了MainScene:

viewDidLoad() {
self.sceneView = MainScene(view: self.view)) }

...在此处(注意:SCNScene 而不是 SCNView):

class MainScene: SCNScene, SCNPhysicsContactDelegate {...
init(view:UIView) {
scnView = view as! SCNView
super.init()
scnView.scene = self; (...) }

场景完美创建,我现在想叠加一个SKScene。有人知道怎么做吗?

SpriteKit 叠加在 SceneKit 视图上,而不是在 SceneKit 场景上。这有点令人困惑,因为您要在视图上叠加场景。

我看到几个可能的错误来源:

self.sceneView = MainScene(view: self.view)) 

定义为 returns 和 SCNScene。您将其分配给需要 SCNView.

的 属性

scnView = view as! SCNView

除非 view returns 正确连接 SCNView 实例,否则将崩溃。但是您编写的 init 定义需要 UIView.

在某个地方,您需要将视图设置为 SCNView。该视图,因为它符合协议 SCNSceneRenderer,将在其上有一个 overlaySKScene 属性(overlaySKScene 来自该协议,而不是来自 SCNView)。这是您可以分配 SKScene 实例的地方。

如果您这样做了,那么您的代码将类似于

scnView.scene = self 
scnView.overlaySKScene = theSKScene

我有一个 SKScene 覆盖在 https://github.com/halmueller/ImmersiveInterfaces/tree/master/Tracking%20Overlay

SCNView 上的简单示例

另见 How do I create a HUD on top of my Scenekit.scene