Синхронизация сущностей RealityKit всегда равна нулю

Пытаюсь создать многопользовательский режим с помощью RealityKit. Но компонент синхронизации всех сущностей всегда nil, даже если я установил его явно.

dump(entity.synchronization)  // nil
entity.synchronization = SynchronizationComponent()
dump(entity.synchronization)  // nil

В результате виртуальный контент не передается. Что я делаю не так?


person Alexander Gaidukov    schedule 23.11.2019    source источник


Ответы (1)


Кажется, что сначала вам понадобится служба (MultipeerConnectivityService), которая обеспечивает синхронизацию сцены между всеми одноранговыми узлами в сеансе многопользовательского подключения (MCSession). Как это:

import ARKit
import RealityKit
import MultipeerConnectivity

let mcPeerID = MCPeerID(displayName: UIDevice.current.name)

let session = MCSession(peer: mcPeerID, 
            securityIdentity: nil, 
        encryptionPreference: .required)

arView.scene.synchronizationService = 
                             try? MultipeerConnectivityService(session: session)


И, я полагаю, вы включили свойство экземпляра isCollaborationEnabled, которое выбирает одноранговую многопользовательскую среду AR:

let collabConfig = ARWorldTrackingConfiguration()
collabConfig.isCollaborationEnabled = true
arView.session.run(collabConfig)
person Andy Fedoroff    schedule 02.03.2020
comment
Не работает. У меня есть MultipeerConnectivityService и флаг isCollaborationEnabled включен, но компонент синхронизации равен нулю - person Alexander Gaidukov; 06.04.2020
comment
У меня такая же проблема. Для получения дополнительной информации попробуйте использовать catch вместо try ?. На мой взгляд, я получаю следующую неинформативную ошибку. Операция не может быть завершена. (Ошибка RealityKit.MultipeerConnectivityService.SynchronizationError 0.) - person Owen Godfrey; 18.09.2020
comment
Кажется, я решил проблему, но не знаю, что сделал. Я думаю, что отчасти проблема заключалась в том, что SwiftUI случайно настраивал синхронизацию в предварительных просмотрах в то же время… или, возможно, я увеличил версии до iOS 14. По какой-то причине кажется, что сам код был правильным. - person Owen Godfrey; 19.09.2020