首页 > 解决方案 > 附加到 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 场景中?

标签: iossprite-kitarkitaranchor

解决方案


当我将我的代码与 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 一个大小),一切都正确显示。但是,我不认为硬编码宽度和高度是做事的正确方法。我会问一个单独的问题


推荐阅读