如何在Arkit中提供持久性?

时间:2018-12-15 10:41:26

标签: ios augmented-reality arkit

首先,我想说我真的是IOS开发和AR技术的初学者。我使用Arkit开发了有关AR的示例项目。我创建了虚拟的3D对象,并将该对象放置在实际位置中。但是对象的生命周期只有一个会话。

我的意思是,当我在同一位置重新打开应用程序时,该对象出现一个会话,通常它的位置都丢失了。我不保存对象的位置。如何在Arkit中提供持久性?我已经阅读了一些有关它的文章。

要提供持久性AR体验,应遵循哪些步骤? 如何结合AR和定位服务? 有人知道吗?你能帮我吗?

如果问题是重复的,我真的很抱歉。

最好的问候。

1 个答案:

答案 0 :(得分:1)

iOS 12 ARKit2中恢复AR Session体验变得非常简单。 Apple在ARKit2中提供了World Map Persistence,使您可以保留有关AR会话的几乎所有内容。即使应用程序终止,您也可以保存ARKit世界地图并在以后还原映射数据,以便用户稍后重新打开应用程序时可以返回到上一个AR会话。

Apple Documents中所述,您可以:

  

在您的应用变为非活动状态时保存世界地图,然后将其还原为   下次您的应用在相同的物理环境中启动时。您可以   使用恢复的世界地图中的锚点放置相同的虚拟   内容与保存的会话位于相同位置。

     

ARWorldMap符合NSSecureCoding协议,因此您可以转换   使用来往或来自二进制数据表示形式的世界地图   NSKeyedArchiverNSKeyedUnarchiver类。

您将世界地图转换为数据并将其存储在文件中,然后可以在下次应用启动时稍后加载此文件,并将其转换回ARWorldMap并将场景视图配置的初始世界地图设置为已加载的世界地图:

 override func viewWillAppear(_ animated: Bool) {
    super.viewWillAppear(animated)

    // Retrieve the persisted world map, then simply set it in the configuration and run the session:

    let configuration = ARWorldTrackingConfiguration()
    configuration.initialWorldMap = worldMap

    sceneView.session.run(configuration)
} 

您可以遵循this tutorial来获得完整的工作示例。