节点的几何(来自 DAE 文件)仅在生产版本中为零

Posted

技术标签:

【中文标题】节点的几何(来自 DAE 文件)仅在生产版本中为零【英文标题】:Node's geometry (from DAE file) is nil only on production builds 【发布时间】:2021-03-08 13:34:31 【问题描述】:

我有一个 3D 模型,当从 Xcode 编译时,它在真实设备和模拟器上始终可以正常工作,即使设置为 Release 并使用任何优化设置,但是当上传到 TestFlight 时它缺少一些材料。

调试后(使用 TF 构建,因为无法在本地重现)我发现我正在使用的两个节点(看起来很糟糕的节点)没有几何结构(它们在本地有几何结构)。

我正在使用的代码:

self.scene = SCNScene(named: "model.scnassets/Body.dae")
self.scene?.rootNode.rotation = SCNVector4(1, 0, 0, 45.degreesToRadians)
let baseNode = self.scene?.rootNode.childNode(withName: "Body", recursively: true)
let bodyImageMaterial = SCNMaterial()
bodyImageMaterial.isDoubleSided = false
bodyImageMaterial.diffuse.contents = UIImage(named: "Body_Background")
baseNode?.geometry?.materials = [bodyImageMaterial]

baseNode?.geometry 在生产中返回nil,这是我无法弄清楚的部分,因此没有应用材料。另外我想澄清一下几何图形按预期工作,但它使用默认材质,因为没有应用任何内容。

【问题讨论】:

【参考方案1】:

尝试通过以下方式访问场景图层次结构中节点的子节点:

var childNodes: [SCNNode]  get 

在实际代码中是这样的:

let material = SCNMaterial()
material.diffuse.contents = UIColor.red

let ship = scene.rootNode.childNode(withName: "ship", recursively: true)!        
ship.childNodes[0].geometry?.materials = [material]

有时它可能在层次结构中更深:

someNode.childNodes[0].childNodes[0].geometry?.materials = [material]

【讨论】:

【参考方案2】:

我终于通过将.dae 文件转换为.scn 来实现它。不确定这里会发生什么,因为我还有其他 .dae 按预期工作。

【讨论】:

【参考方案3】:

同样的问题,我终于找到了解决方案:

而不是:

node.boundingBox

使用:

node.presentation.boundingBox

【讨论】:

以上是关于节点的几何(来自 DAE 文件)仅在生产版本中为零的主要内容,如果未能解决你的问题,请参考以下文章

GCP:自动缩放为零的 AI ML 服务

ViewController 的子视图的 IBOutlets 在 Storyboard 的 viewDidLoad 中为零

SceneKit:使用 dae 动画更新 SCNGeometry

SceneKit:使用dae动画更新SCNGeometry

-initWithDocumentTypes iCloud 仅在生产版本中崩溃

选项的保护语句在 swift 中为零