如何在ARKit中添加多个对象?

时间:2018-01-09 03:30:05

标签: ios swift scenekit augmented-reality arkit

在苹果的AR示例项目中,可以选择将椅子放在房间里。在代码中放置多个椅子需要做什么? 一个简单的追加函数会起作用吗?

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

1 个答案:

答案 0 :(得分:2)

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

// Enable access to iOS devices
private func enableDalDevices() {
var property = CMIOObjectPropertyAddress(
    mSelector: CMIOObjectPropertySelector(kCMIOHardwarePropertyAllowScreenCaptureDevices),
    mScope: CMIOObjectPropertyScope(kCMIOObjectPropertyScopeGlobal),
    mElement: CMIOObjectPropertyElement(kCMIOObjectPropertyElementMaster)
)
var allow: UInt32 = 1
let sizeOfAllow = MemoryLayout<UInt32>.size
CMIOObjectSetPropertyData(CMIOObjectID(kCMIOObjectSystemObject),    &property, 0, nil, UInt32(sizeOfAllow), &allow)
 }

如果你需要完整的swift代码来开始...请看一下之前的帖子adds a cube.scn from a remote url

您可以长按

 @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!)

  }

但最好只检测您是否已经删除了要删除的现有sphereNode。你可以在上面的函数中添加这样的东西。

@objc func longPress(_ gesture: UILongPressGestureRecognizer) {


}