附加到 ARAnchor 的 SpriteKit SKLabelNode 不显示或全屏显示

问题描述

我正在世界原点位置向我的场景视图添加一个锚点:

let configuration = ARWorldTrackingConfiguration()
sceneView.session.run(configuration)
sceneView.session.add(anchor: aranchor(name: "world origin",transform: matrix_identity_float4x4))
sceneView.presentScene(SKScene())

然后我选择在我的锚点位置显示一个 SKLabelNode

func view(_ view: ARSKView,nodeFor anchor: aranchor) -> SKNode? {
    // Create and configure a node for the anchor added to the view's session.
    let labelNode = SKLabelNode(text: "?")
    labelNode.horizontalAlignmentMode = .center
    labelNode.verticalAlignmentMode = .center
    return labelNode;
}

当我运行应用程序并四处移动相机时,我注意到我根本没有看到节点(我只看到普通的相机),或者我看到整个屏幕都是紫色的(就像标签一样节点字体很大)。

我尝试添加 labelNode.fontSize = 5 但仍然存在同样的问题。

如何让节点正确显示在我的 SpriteKit 场景中?

解决方法

当我将我的代码与 Apple 的默认 SpriteKit + ARKit 示例应用程序进行比较时,主要区别在于:

sceneView.presentScene(SKScene())

在他们的示例代码中,他们使用:

// Load the SKScene from 'Scene.sks'
if let scene = SKScene(fileNamed: "Scene") {
    sceneView.presentScene(scene)
}

看起来 SKScene.sks 的大小为 750 x 1334,因此等效于:

sceneView.presentScene(SKScene(size: CGSize(width: 750,height: 1334)))

当我将代码更新到最后一行时(即给 SKScene 一个大小),一切都会正确显示。但是,我不认为对宽度和高度进行硬编码是正确的做法。我会就此询问 separate question