问题描述
let configuration = ARWorldTrackingConfiguration()
sceneView.session.run(configuration)
sceneView.session.add(anchor: aranchor(name: "world origin",transform: matrix_identity_float4x4))
sceneView.presentScene(SKScene())
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。