iOS ARKit技术问询:如何将3D物体迁移至另一平面
ARKit 物体平移功能实现代码解析
我最近在做ARKit开发时,实现了一个基于拖拽手势的3D物体移动函数,代码和关键逻辑如下:
var currentNode = SCNNode() @objc func moveNode(_ gesture: UIPanGestureRecognizer) { if !isRotating{ //1. 获取当前触摸点 let currentTouchPoint = gesture.location(in: self.sceneView) if gesture.state == .began { guard let nodeHitTest = self.sceneView.hitTest(currentTouchPoint, options: nil).first else {return} let nodeHit = nodeHitTest.node currentNode = nodeHit } if gesture.state == .changed { // 这里可以补充实现:将2D触摸点转换为3D空间中的目标位置 // 比如通过sceneView的projectPoint/unprojectPoint方法计算 // 然后更新currentNode的position属性 } } }
关键逻辑拆解
- 用
currentNode变量记录当前被选中的待移动3D节点,方便在手势变化阶段直接操作 @objc标记方法是为了让UIKit的拖拽手势(UIPanGestureRecognizer)能够识别并调用这个方法isRotating判断是为了避免平移和旋转手势的逻辑冲突,确保同一时间只处理一种交互- 手势开始阶段(
.began):通过hitTest检测触摸点对应的3D节点,只有成功命中节点时才会记录目标节点 - 手势变化阶段(
.changed):需要补充将2D屏幕触摸点转换为3D空间位置的逻辑,然后更新currentNode的position属性,就能实现物体跟随手指移动的效果
内容的提问来源于stack exchange,提问作者Duc Phan
相关产品推荐
相关产品推荐

