ios - 无论如何可以识别ARKit中的触摸节点吗?
问题描述
我正在使用ARKit
投影 3D 文件。在那个 3D 中有多个子节点。当用户触摸任何节点时,我们必须显示有关所触摸节点的一些信息。
有什么方法可以识别用户触摸了哪个节点?
解决方案
您可以执行命中测试来确定用户触摸了哪个节点。假设您的场景中有两个节点,例如:
override func viewDidLoad() {
...
let scene = SCNScene()
let node1 = SCNNode()
node1.name = "node1"
let node2 = SCNNode()
node2.name = "node2"
scene.rootNode.addChildNode(node1)
scene.rootNode.addChildNode(node2)
sceneView.scene = scene
let tapGestureRecognizer = UITapGestureRecognizer(target: self, action: #selector(tapped))
sceneView.addGestureRecognizer(tapGestureRecognizer)
}
在您的点击处理程序中,您可以检测触摸的节点并执行您需要的任何逻辑,例如显示有关节点的一些信息。
@objc func tapped(recognizer: UIGestureRecognizer) {
guard let sceneView = recognizer.view as? SCNView else { return }
let touchLocation = recognizer.location(in: sceneView)
let results = sceneView.hitTest(touchLocation, options: [:])
if results.count == 1 {
let node = results[0].node
print(node.name) // prints "node1" or "node2" if user touched either of them
if node.name == "node1" {
// display node1 information
} else if node.name == "node2" {
// display node2 information
}
}
}
推荐阅读
- sql - SELECT DISTINCT 省略 ORDER BY 中存在的列
- javascript - 如何根据给定的对象将对象输出到动态变化的表中
- uml - 我如何表示用例的条件?
- python - Jupyter 笔记本:如何执行包含导入和魔术命令的外部文件?
- android - 未找到改造注释。@GET 调用中的(参数 #2)
- c# - 使用外键播种表
- node.js - node-tesseract-ocr 'tesseract' 未被识别为内部或外部命令
- postgresql - PostgreSQL 端口 5432 已在使用 // 忘记用户密码
- android - 无法启动 android 模拟器:WHPX: Unexpected VP exit code 5
- payment-gateway - 如何使用 Authorize.Net 设置定期付款?