如何解决RealityKit - 完成移动实体时检测
将 RealityKit 的 installGestures
用于实体,我可以移动、旋转和调整它们的大小。这很酷,但我希望能够检测到用户何时完成移动对象以触发某事。
现在我有这个:
guard let entity = try? ModelEntity.loadModel(named: "\(name).usdz")
else {
NSLog("ERROR loading model")
return
}
entity.generateCollisionShapes(recursive: true)
arView.installGestures(.all,for: entity)
let anchorEntity = AnchorEntity(world: position)
anchorEntity.addChild(entity)
arView.scene.anchors.append(anchorEntity)
那么现在,我该如何处理 gesture
事件以获得移动/调整大小的 oenetity 的新位置?
谢谢!
解决方法
installGestures()
实际上返回一个包含 EntityGestureRecognizer
实例的数组。
您可以遍历此数组并向每个识别器添加一个目标:
arView.installGestures(.all,for: entity).forEach { gestureRecognizer in
gestureRecognizer.addTarget(self,action: #selector(handleGesture(_:)))
}
然后您可以添加一个手势处理程序来检查适当的手势识别器,检查其 .state
属性并采取相应的行动:
@objc private func handleGesture(_ recognizer: UIGestureRecognizer) {
guard let translationGesture = recognizer as? EntityTranslationGestureRecognizer else { return }
switch translationGesture.state {
case .began:
print("Translation gesture began")
case .ended:
print("Translation gesture ended")
// get entity.transform
default:
break
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。