gpt4 book ai didi

ios - ARKit : Handle tap to show/hide a node

转载 作者:行者123 更新时间:2023-11-30 11:57:26 25 4
gpt4 key购买 nike

我是 ARKit 新手,我正在尝试一个在点击位置创建 SCNBox 的示例。我想做的是在初次触摸时创建一个盒子,第二次点击创建的盒子时,它应该从场景中删除。我正在做 HitTest 。但它不断添加盒子。我知道这是一项简单的任务,但我无法做到

    @objc func handleTap(sender: UITapGestureRecognizer) {

print("hande tapp")
guard let _ = sceneView.session.currentFrame
else { return }

guard let scnView = sceneView else { return }
let touchLocation = sender.location(in: scnView)
let hitTestResult = scnView.hitTest(touchLocation, types: [ .featurePoint])

guard let pointOfView = sceneView.pointOfView else {return}
print("point \(pointOfView.name)")

if hitTestResult.count > 0 {

print("Hit")

if let _ = pointOfView as? ARBox {

print("Box Available")
}

else {

print("Adding box")

let transform = hitTestResult.first?.worldTransform.columns.3
let xPosition = transform?.x
let yPosition = transform?.y
let zPosition = transform?.z
let position = SCNVector3(xPosition!,yPosition!,zPosition!)

basketCount = basketCount + 1
let newBasket = ARBox(position: position)
newBasket.name = "basket\(basketCount)"
self.sceneView.scene.rootNode.addChildNode(newBasket)
boxNodes.append(newBasket)

}
}
}

最佳答案

sceneView 的

pointOfView 是场景的根节点,用于渲染整个场景。对于一般情况,它通常是一个带有灯光/相机的空节点。我认为您不应该将其转换为 ARBox/或任何类型的 SCNNode。

您可能可以尝试以下逻辑(hitResults 是 hitTest 的结果):

if hitResults.count > 0 {
if let node = hitResults.first?.node as SCNNode? (or ARBox) {
// node.removeFromParentNode()
// or make the node opaque if you don't want to remove
else {
// add node.

关于ios - ARKit : Handle tap to show/hide a node,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47648548/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com