首先,我想说我真的是IOS开发和AR技术的初学者。我使用Arkit开发了有关AR的示例项目。我创建了虚拟的3D对象,并将该对象放置在实际位置中。但是对象的生命周期只有一个会话。
我的意思是,当我在同一位置重新打开应用程序时,该对象出现一个会话,通常它的位置都丢失了。我不保存对象的位置。如何在Arkit中提供持久性?我已经阅读了一些有关它的文章。
要提供持久性AR体验,应遵循哪些步骤? 如何结合AR和定位服务? 有人知道吗?你能帮我吗?
如果问题是重复的,我真的很抱歉。
最好的问候。
答案 0 :(得分:1)
在 iOS 12 和ARKit2
中恢复AR Session体验变得非常简单。 Apple在ARKit2中提供了World Map Persistence,使您可以保留有关AR会话的几乎所有内容。即使应用程序终止,您也可以保存ARKit世界地图并在以后还原映射数据,以便用户稍后重新打开应用程序时可以返回到上一个AR会话。
如Apple Documents中所述,您可以:
在您的应用变为非活动状态时保存世界地图,然后将其还原为 下次您的应用在相同的物理环境中启动时。您可以 使用恢复的世界地图中的锚点放置相同的虚拟 内容与保存的会话位于相同位置。
ARWorldMap符合NSSecureCoding协议,因此您可以转换 使用来往或来自二进制数据表示形式的世界地图 NSKeyedArchiver和NSKeyedUnarchiver类。
您将世界地图转换为数据并将其存储在文件中,然后可以在下次应用启动时稍后加载此文件,并将其转换回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来获得完整的工作示例。