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

ARKit:如何在didUpdate方法中同时更新ARFaceAnchor与ARMeshAnchor节点?

解决ARKit中同时处理ARFaceAnchor和ARMeshAnchor的节点更新问题

你现在的问题根源是写了两个签名完全一致的renderer(_:didUpdate:for:)代理方法,Swift中这种同名同参数的方法会互相覆盖,最终只有最后一个方法的逻辑会被执行,所以另一种锚点的处理代码根本跑不起来。

正确的做法是把两种锚点的处理逻辑合并到同一个代理方法里,通过类型判断区分处理:

func renderer(_ renderer: SCNSceneRenderer, didUpdate node: SCNNode, for anchor: ARAnchor ) {
    // 处理ARFaceAnchor
    if let faceAnchor = anchor as? ARFaceAnchor {
        targetFaceGeometry = faceAnchor.geometry
    }
    // 处理ARMeshAnchor
    else if let meshAnchor = anchor as? ARMeshAnchor {
        let geometry = createGeometryFromAnchor(meshAnchor: meshAnchor)
        geometry.firstMaterial?.colorBufferWriteMask = [.alpha]
        node.geometry = geometry
    }
}

额外注意点

  • 确保targetFaceGeometry是类的成员变量,作用域正确,不然无法保存更新后的人脸几何数据
  • 确认createGeometryFromAnchor(meshAnchor:)方法能正常从ARMeshAnchor生成对应的SCNGeometry,避免出现nil导致逻辑中断

内容的提问来源于stack exchange,提问作者Dmitry

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 21:57:29