1

我正在将一个 .usdz 文件加载到我的 ARSCNView 中,到目前为止它工作正常,除了当我将多个对象加载到我的场景中时,应用程序崩溃并显示消息:由于内存问题而终止。

我正在使用 Apple 的默认 .usdz 示例(https://developer.apple.com/augmented-reality/quick-look/),机器人文件大约 13.5MB 大。

它最多可与 4-5 个实例一起使用,然后崩溃。

ARKit 应用程序的限制这么小,还是我做错了什么?

这是我的代码:

// My touch point on the screen
let touchLocation = sender.location(in: sceneView)    

// We have a touch point on an ARPlane
if let result = self.sceneView.hitTest(touchLocation, types: ARHitTestResult.ResultType.existingPlaneUsingExtent).last {

    let position = SCNVector3Make(result.worldTransform.columns.3.x, result.worldTransform.columns.3.y, result.worldTransform.columns.3.z)

    // Load the .usdz model        
    guard let usdzURL = Bundle.main.url(forResource: "toy_robot_vintage", withExtension: "usdz") else {
        return
    }

    // Create a node, set position and scale
    let referenceNode = SCNReferenceNode(url: usdzURL)!
    referenceNode.load()
    referenceNode.position = position
    referenceNode.scale = SCNVector3Make(0.01, 0.01, 0.01)

    // Add node to scene
    sceneView.scene.rootNode.addChildNode(referenceNode)
}
4

1 回答 1

0

应用程序可以分配一定数量的内存,如果超过,它会被操作系统自动杀死。我在 iPhone 6S 上测试了一个简单的ARKit应用程序,添加一个大小约为 13.5MB 的单个 usdz 文件会使应用程序的内存使用量增加约 280MB,应用程序的内存限制为 1.37GB,如 Xcode 的内存报告部分所示:

在此处输入图像描述

您可以看到每次将相同的 usdz 文件再次添加到场景中时内存使用量如何增加。因此,从技术上讲,您不能(也可能不应该)将多个 usdz 文件同时添加到您的应用程序中。

于 2019-06-19T14:53:11.863 回答