Итак, у меня есть приложение RealityKit, в которое я добавляю различныеEntities
. Я искал вдохновения для настойчивости в примере Apple SceneKit с кодом, который я реализовано только для обнаружения пропавших без вести Entities
при загрузке WorldMap
ARKit RealityKit WorldMap Persistence
Ответы (1)
Я предполагаю, что вы можете сохранить и загрузить карту мира из сеанса ARView, но проблема в том, что при этом сохраняется только старый стиллер ARAnchors, а не классные новые объекты Entity из новых функций RealityKit.
Работа, которую я сделал, заключалась в том, чтобы инициализировать мои AnchorEntities, используя конструктор, который принимает ARAnchor
. Итак, из моего hitTest или RayCast я беру преобразование мира и сохраняю его как ARAnchor, а затем использую его для инициализации AnchorEntity
. Я дал этому ARAnchor
уникальное имя, которое будет использоваться позже для переназначения сущности при загрузке постоянной карты мира, поскольку эта карта по-прежнему имеет только ARAnchors.
let arAnchor = ARAnchor(name: anchorId, transform: rayCast.worldTransform) // ARAnchor with unique name or ID
let anchorEntity = AnchorEntity(anchor: arAnchor)
Вот как это выглядело перед добавлением якорей в сцену в первый раз. После того, как вы сохраните свою карту мира, закроете и перезагрузите, я затем перебираю загруженные или сохраненные ARAnchors и связываю каждую привязку с их соответствующими Entities, которые сопоставляются с именем в ARAnchor
.
let anchorEntity = AnchorEntity(anchor: persistedArAnchor) // use the existing ARAnchor that persisted to construct an Entity
var someModelEntity: Entity = myEntityThatMatchesTheAnchorName // remake the entity that maps to the existing named ARAnchor
anchorEntity.addChild(someModelEntity)
arView.scene.addAnchor(anchorEntity)
Это косвенно, но использование этой связи между AnchorEntity
и ARAnchor
было первым решением, которое я смог найти, учитывая ограничение, заключающееся в знании только того, как сохранять ARAnchors, а не Entities в worldMap.