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
相关产品推荐
相关产品推荐

