我正在尝试使用RealityKit构建一个协作会话。据我所知,我需要符合我的实体的同步组件。
因此,我的问题是:是否有任何关于使用该组件的文档来源?特别是,我不明白是否应该从接收方处理用于处理接收数据的任何委托方法。
我想强调的一点是:我正在用RealityKit而不是ARKit 3来寻找解决方案。按照苹果在WWDC上的说法,他们说:
如果您使用的是RealityKit,这是使用协作会话所需要添加的唯一新代码。如果不使用RealityKit,则需要实现另外两个委托函数来传输协作数据。
谢谢。
发布于 2019-09-18 14:38:34
采用ARSessionDelegate
和MCSessionDelegate
协议,实现它们的委托,并将isCollaborationEnabled
实例属性设置为true
import RealityKit
import ARKit
import MultipeerConnectivity
class ViewController: UIViewController, ARSessionDelegate, MCSessionDelegate {
@IBOutlet var arView: ARView!
var mcSession: MCSession?
override func viewDidLoad() {
super.viewDidLoad()
arView.session.delegate = self
mcSession!.delegate = self
let config = ARWorldTrackingConfiguration()
config.planeDetection = [.horizontal]
config.isCollaborationEnabled = true
arView.debugOptions = [.showFeaturePoints]
arView.session.run(config)
}
}
然后使用ARSessionDelegate和MCSessionDelegate的session()
实例方法:
extension ViewController {
let name = UIDevice.current.name
let myPeerID = MCPeerID(displayName: name)
var peers = [MCPeerID]()
peers.append(myPeerID)
func session(_ session: ARSession,
didOutputCollaborationData data: ARSession.CollaborationData) {
self.mcSession = MCSession(peer: myPeerID,
securityIdentity: nil,
encryptionPreference: .required)
do {
try self.mcSession.send(data.collaborationData(),
toPeers: peers,
with: .reliable)
} catch {
print("Get Error while outputting Collaboration Data")
}
}
func session(_ session: MCSession,
didReceive data: Data,
fromPeer peerID: MCPeerID) {
self.arView.session.update(with: data.data())
}
func session(_ session: ARSession,
didRemove anchors: [ARAnchor]) {
for anchor in anchors {
if anchor.sessionIdentifier = session.identifier {
// your anchors here...
}
}
}
}
extension ARSession.CollaborationData {
func collaborationData() -> Data {
let data = Data()
// ...
return data
}
}
extension Data {
func data() -> ARSession.CollaborationData {
let data = ARSession.CollaborationData(coder: nsCoder)
// ...
return data!
}
}
你可以阅读和观看它,这里。
https://stackoverflow.com/questions/57992669
复制相似问题