【问题标题】:RealityKit Entity synchronization is always nilRealityKit 实体同步始终为零
【发布时间】:2022-05-14 17:51:58
【问题描述】:

尝试使用 RealityKit 构建多人游戏体验。但是所有实体的同步组件始终是nil,即使我明确设置。

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

因此,虚拟内容不被共享。我做错了什么?

【问题讨论】:

    标签: swift synchronization augmented-reality arkit realitykit


    【解决方案1】:

    ViewController.swift

    首先,您必须设置一个服务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)
    

    info.plist

    其次,您必须在属性列表文件中设置NSLNUDNSBonjourServices

    <key>NSLocalNetworkUsageDescription</key>
        <string>LNUD</string>
    
    <key>NSBonjourServices</key>
        <array>
            <string>_service._tcp</string>
            <string>_service._udp</string>
        </array>
    

    【讨论】:

    • 它不起作用。我有一个 MultipeerConnectivityService 并且 isCollaborationEnabled 标志已打开,但同步组件为 nil
    • 我遇到了同样的问题。有关更多信息,请尝试使用 catch 而不是“try?”。对我来说,我只是收到以下无意义的错误。 “操作无法完成。(RealityKit.MultipeerConnectivityService.SynchronizationError 错误 0。)”
    • 我似乎已经解决了这个问题,但我不确定我做了什么。我认为部分问题是 SwiftUI 不小心同时在预览中设置了同步……或者可能是我将版本增加到 iOS 14。无论出于何种原因,代码本身似乎都是正确的。
    猜你喜欢
    • 2021-04-26
    • 1970-01-01
    • 2012-12-29
    • 1970-01-01
    • 2020-01-19
    • 2016-05-02
    • 2012-01-16
    • 2020-01-07
    • 1970-01-01
    相关资源
    最近更新 更多