ARKit 2.0 - Невозможно декодировать ARAnchor в многопользовательском сеансе в многопользовательской демонстрации - PullRequest
0 голосов
/ 29 августа 2018

Я тестирую демонстрационное приложение Apple Multiuser AR с ARKit 2.0, которое было представлено в WWDC 2018: Создание многопользовательского AR-опыта .

В документации говорится, что после того, как каждое устройство перемещается на одно и то же World Map, только информация, необходимая для воссоздания каждого пользовательского действия, передается между устройствами (например, если пользователь нажимает на экран и появляется трехмерный объект, только этот новый объект ARAnchor должен быть отправлен на другие устройства). Для меня, хотя он показывает все трехмерные символы, которые были размещены отправляющим устройством до того, как оно захватило и отправило карту мира, он не показывает никаких объектов, которые были добавлены после отправки карты мира. Я получаю сообщение об ошибке:

// can't decode data recieved from peer.

Кто-нибудь имел эту проблему и знает, о чем она?

Я ничего не изменил в демо-коде.

1 Ответ

0 голосов
/ 24 сентября 2018

У меня была такая же проблема, но я вроде решил ее таким образом.

(1) сначала создайте переменную, чтобы проверить, была ли отправлена ​​карта мира.

var worldMapHasInited: Bool = false

(2) Затем в func shareSession (кнопка _: кнопка UIB) добавьте эту строку в конец ниже

self.multipeerSession.sendToAllPeers (данные)

self.worldMapHasInited = true

(3) И, наконец, в func receiveData (_ данные: данные от однорангового узла: MCPeerID)

проверить, отправила ли карта мира, если отправлено, пропустить проверку, содержат ли данные карту мира.

    if !worldMapHasInited {
        if let worldMap = try NSKeyedUnarchiver.unarchivedObject(ofClass: ARWorldMap.self, from: data)
        {
            //....
            // when received world map, set the receiver's 
            // worldMapHasInited to true  
            self.worldMapHasInited = true                                              
        }
    }
    else
        if let anchor = try NSKeyedUnarchiver.unarchivedObject(ofClass: ARAnchor.self, from: data) {
            // ...
    }

Это будет непосредственно проверять, содержат ли данные привязку.

...