【问题标题】:RealityKit – Detect when finished moving an entityRealityKit - 完成移动实体时检测
【发布时间】:2021-01-29 11:07:51
【问题描述】:

将 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 事件以获得移动/调整大小的新位置?

谢谢!

【问题讨论】:

    标签: swift augmented-reality arkit realitykit


    【解决方案1】:

    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
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-03-29
      • 1970-01-01
      • 1970-01-01
      • 2020-11-07
      • 1970-01-01
      • 2021-09-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多