使用ARKit点击sceneView添加SCNNode时simd_float4x4无translation警告如何解决
问题原因
simd_float4x4 是苹果SIMD框架提供的4x4变换矩阵类型,系统原生并未提供 translation 这个便捷属性,你参考的代码大概率是作者自定义了对应扩展,或是基于旧版本第三方封装API编写的,因此直接调用会触发成员不存在的警告。
修复方案
方案1:直接手动提取位移值(仅需修改报错行,无需新增代码)
4x4变换矩阵的位移值默认存储在矩阵第四列的x、y、z分量中,直接替换报错行代码即可:
let translation = hitTestResult.worldTransform.columns.3
后续的x/y/z取值逻辑无需任何改动,即可正常拿到对应位置坐标。
方案2:全局添加扩展,兼容原有写法
如果项目中多处需要从变换矩阵中提取位移值,可以给simd_float4x4添加统一扩展,后续所有位置都可以直接调用translation属性。在项目任意全局可达的Swift文件中添加如下代码:
import simd extension simd_float4x4 { var translation: simd_float3 { let translateColumn = columns.3 return simd_float3(translateColumn.x, translateColumn.y, translateColumn.z) } }
添加扩展后你原有代码不需要做任何调整,警告会自动消除。
内容的提问来源于stack exchange,提问作者MarkMichaels123
相关产品推荐
相关产品推荐

