You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 03:50:00