【问题标题】:ARSCNView prepare crash when SCNMaterialProperty is SpriteKit scene当 SCNMaterialProperty 为 SpriteKit 场景时 ARSCNView 准备崩溃
【发布时间】:2019-05-12 10:50:10
【问题描述】:

我遇到了 ARKit/SceneKit 崩溃。

如果我执行以下操作,就会发生这种情况:-

  • 创建 SCNPlane 并将 SCNMaterialProperty 设置为 SpriteKit 场景
  • 使用 SCNPlane 创建 SCNNode
  • 在 ARSCNView 上调用 prepare 并添加 SCNNode。

当我调用准备时它崩溃了。但是,如果我添加 SCNNode 而不调用 prepare 或者 SCNMaterialProperty 不是 SpriteKit 场景,它不会崩溃。

见下面的代码:-

var exhibitScene = SKScene(fileNamed: spriteName.lowercased())
exhibitScene?.view?.preferredFramesPerSecond = 60
exhibitScene?.view?.ignoresSiblingOrder = true
exhibitScene?.scaleMode = .aspectFit
exhibitScene?.isPaused = false

let exhibitSize = CGSize.init(width: (exhibitScene?.frame.size.width)! / PIXEL_TO_CENTIMETRE, height: (exhibitScene?.frame.size.height)! / PIXEL_TO_CENTIMETRE)

let exhibitPlane = SCNPlane(width: exhibitSize.width/100, height: exhibitSize.height/100)
exhibitPlane.firstMaterial?.diffuse.contents = exhibitScene
exhibitPlane.firstMaterial?.diffuse.contentsTransform = SCNMatrix4Translate(SCNMatrix4MakeScale(1, -1, 1), 0, 1, 0)

let exhibitNode = SCNNode(geometry: exhibitPlane)
exhibitNode.name = name
exhibitNode.geometry?.firstMaterial?.isDoubleSided = false
exhibitNode.position = SCNVector3(x/100, (y + Float(exhibitSize.height * 0.5))/100, z/100)

self.sceneView.prepare([exhibitNode], completionHandler: { (Bool) in
     self.sceneView.scene.rootNode.addChildNode(exhibitNode)
})

不知道如何解决这个问题。

当 SCNMaterialProperty 设置为使用 SpriteKit 场景时,是否必须在 ARSCNView 上设置参数才能准备 SCNNode?​​p>

【问题讨论】:

    标签: scenekit arkit


    【解决方案1】:

    不确定您的情况,但是当 SKScene(以及因此 SCNPlane)的大小超过某个限制时,我遇到了类似的崩溃。崩溃的实际原因是SCNMaterialProperty.contents 可能不会超过某个限制(我相信它大约是 4000px 或其他东西)。

    【讨论】:

      猜你喜欢
      • 2014-10-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-08-19
      • 1970-01-01
      • 1970-01-01
      • 2013-03-15
      相关资源
      最近更新 更多