【问题标题】:How can I add multiple objects in ARKit?如何在 ARKit 中添加多个对象?
【发布时间】:2018-01-09 03:30:04
【问题描述】:

在苹果的 AR 示例项目中,有一个在房间里放置椅子的选项。我需要做什么才能在代码中放置多把椅子? 一个简单的附加函数可以解决问题吗?

当我点击椅子选项时,我需要将第一把椅子放在飞机上。如果我再次点击该选项,则应再次放置椅子。而且我知道我也需要一个删除功能。那么如何检测用户的长按呢?

【问题讨论】:

  • 如果您有ARSCNView,您可以通过addChildNode() 方法将多个对象添加到场景中。您可以通过在对象上调用removeFromParentNode() 从场景中移除对象。

标签: ios swift scenekit augmented-reality arkit


【解决方案1】:

每次点击显示屏时添加一个球的基本点击功能。

 @objc func handleTap(_ gesture: UITapGestureRecognizer) {

 let results = self.sceneView.hitTest(gesture.location(in: gesture.view), types: ARHitTestResult.ResultType.featurePoint)
guard let result: ARHitTestResult = results.first else {
    return
}

// create a simple ball
let sphereNode = SCNNode(geometry: SCNSphere(radius: 0.2)

// create position of ball based on tap result
let position = SCNVector3Make(result.worldTransform.columns.3.x, result.worldTransform.columns.3.y, result.worldTransform.columns.3.z)

// set position of ball before adding to scene
sphereNode?.position = position

 // each tap adds a new instance of the ball.
   self.sceneView.scene.rootNode.addChildNode(sphereNode!)

  }

如果您需要完整的 swift 代码以开始使用...请查看之前的帖子 adds a cube.scn from a remote url

你可以长按

@objc func longPress(_ gesture: UILongPressGestureRecognizer) {


} 

但最好只检测到您已点击要删除的现有 sphereNode。您可以在上述函数中添加类似的内容。

let tappedNode = self.sceneView.hitTest(gesture.location(in: gesture.view), options: [:])

if !tappedNode.isEmpty {
  let node = tappedNode[0].node 
  node.removeFromParent()
  } else { 
 // add my new node
}

【讨论】:

  • 谢谢。
  • 不用担心。你需要放。 self.sceneView.addGestureRecognizer(UITapGestureRecognizer(target: self, action: #selector(ViewController.handleTap(_:)))) 在viewDidLoad或者view加载的时候...调用handleTap函数。
猜你喜欢
  • 1970-01-01
  • 2018-07-28
  • 2020-07-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多