The space-mapping state and set of anchors from a world-tracking AR session.
SDK
- iOS 12.0+
Framework
- ARKit
Declaration
@interface ARWorldMap : NSObject
Overview
The session state in a world map includes ARKit's awareness of the physical space the user moves the device in (which ARKit uses to determine the device's position and orientation), as well as any ARAnchor
objects added to the session (which can represent detected real-world features or virtual content placed by your app).
Serialize and Deserialize a World Map
When your app is quitting, you can save the current world map (acquired using get
). Because ARWorld
conforms to NSSecure
, you serialize it using NSKeyed
.
func writeWorldMap(_ worldMap: ARWorldMap, to url: URL) throws {
let data = try NSKeyedArchiver.archivedData(withRootObject: worldMap, requiringSecureCoding: true)
try data.write(to: url)
}
To restore the world map the next time your app launches, use NSKeyed
.
func loadWorldMap(from url: URL) throws -> ARWorldMap {
let mapData = try Data(contentsOf: url)
guard let worldMap = try NSKeyedUnarchiver.unarchivedObject(ofClass: ARWorldMap.self, from: mapData)
else { throw ARError(.invalidWorldMap) }
return worldMap
}
You can use anchors from a resumed world map to place the same virtual content at the same positions from the saved session, if the app is launched in the same physical environment.
For more information, see Saving and Loading World Data.
Share a Saved World Map
With two devices tracking the same world map, you can build a networked experience where both users can see and interact with the same virtual content. To send an ARWorld
to another device, creating a shared frame of reference for multiuser AR experiences:
On one device, use
NSKeyed
as in to convert the world map to a data object. (You don't need to write the data to a file to send it over the network.)Archiver Use the networking technology of your choice to send the resulting data to another device. (For example, in a MultipeerConnectivity session, call
send
to send data, and implementData: to Peers: with Mode: error: MCSession
methods on the other device to receive data.)Delegate On the receiving device, use
NSKeyed
as in to instantiate anUnarchiver ARWorld
from the data.Map
For more information, see Creating a Multiuser AR Experience.
Run a Deserialized World Map
To begin a new session from an existing ARWorld
, set a world tracking configuration's initial
property and use run
. This starts a new session using the same spatial awareness and anchors loaded from the saved world map.