问题描述
我正在尝试创建一个协作 AR 应用程序,该应用程序允许多个用户向场景中添加块,这些块应该具有物理特性并相互交互。为此,我使用了 RealityKit。
我使用 MultipeerConnectivity 设置了协作会话,并且确实使连接正常工作。两个设备都可以看到另一个设备放置的块。一切正常,直到我添加物理。有了物理学,一切都开始变得奇怪。块跳来跳去,我不会在两个系统上有相同的行为。
然后我尝试将主机和客户端分开,以便只有主机放置 ModelEntities。所以我现在有一个 TapGestureRecognizer,可以放置 aranchors
@objc func handleTap(recognizer: UITapGestureRecognizer){
let cameraPosition = arView.cameraTransform.matrix
let translate = float4x4(
[1,0],[0,1,-0.4,1]
)
let blockPosition = cameraPosition * translate
let aranchor = aranchor(name: "block",transform: blockPosition)
arView.session.add(anchor: aranchor)
}
并且我实现了委托方法,让宿主添加一个 ModelEntity,一旦添加了 aranchor:
func session(_ session: ARSession,didAdd anchors: [aranchor]) {
for anchor in anchors {
if anchor.name == "block" {
// Check for host or not
// If host: add block to the scene
if isHost {
let anchorEntity = AnchorEntity(anchor: anchor)
let model = ModelEntity(
mesh: .generateBox(size: [0.3,0.05,0.2]),materials: [SimpleMaterial(color: .cyan,isMetallic: false)]
)
model.generateCollisionShapes(recursive: true)
model.physicsBody = PhysicsBodyComponent(
shapes: model.collision!.shapes,mass: 1,material: .generate(friction: 10,restitution: 0.1),mode: .dynamic
)
anchorEntity.addChild(model)
anchorEntity.synchronization?.ownershipTransferMode = .autoAccept
arView.scene.addAnchor(anchorEntity)
}
}
}
}
在主机设备上,一切正常。但在物理学上的表现完全不同。块跳来跳去。我可以看到,当我添加一个新块时,它似乎再次尝试同步两个世界,并且在客户端系统上的一小段时间内,块与主机系统上的块位于同一位置,但随后块跳出又见面了。
有没有人遇到过类似的问题并找到了解决方案?还是我做错了什么?
提前致谢!
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)