【问题标题】:RealityKit – Error: 'translation' is inaccessible due to 'internal' protection levelRealityKit – 错误:由于“内部”保护级别,“翻译”无法访问
【发布时间】:2021-08-24 03:09:16
【问题描述】:

我是 Swift 新手,我正在使用 RealityKit 为应用程序界面编写一个 AR 应用程序,并在其中一个视图控制器中使用 Wrapped SwiftUI 结构,因此我可以创建自定义 AR 界面。 (我不知道这是否是正确的方法,但正如我告诉你的那样,我一直在自学并设法做到了直到现在。

无论如何,目标是根据用户给出的纬度和经度放置 AR 对象(仍然没有完成那部分,但我正在使用手动值进行测试),实现这一目标的好方法是使用ARGeoTrackingConfiguration()(从我读过的内容)但是因为我的设备(iPhone 7)没有A12 Bionic芯片,我不能使用它,所以我试图用ARWorldTrackingConfiguration()来实现它,但是这样到目前为止,当尝试使用 self.raycast(...).first?.worldTransform.translation

extension ARView {

    @objc func handleTap(_ sender: UITapGestureRecognizer? = nil) {
    
        guard let touchInView = sender?.location(in: self) else {
            print("Failed on touch")
            return
        }
    
        let results = self.raycast(from: touchInView, 
                               allowing: .estimatedPlane, 
                              alignment: .horizontal)
        print(results)
    
        if let firstResult = results.first {
            let anchor = ARGeoAnchor(name: "pinus_pinaster.usdz", 
                           coordinate: firstResult.worldTransform.translation)
            self.session.add(anchor: anchor)
        } else {
            print("Object placement failed - coudn't find surface")
        }       
    }
}

关于如何解决这个问题的任何解释(一个例子会很好)?

此外,对于 ARKit 开发的任何一般建议,是否可以在没有 ARGeoTrackingConfiguration() 的情况下实现具有这些功能的应用程序?

【问题讨论】:

  • Xcode 也给了我这条信息... 1. 此处声明的“翻译”(RealityKit.simd_float4x4(内部))

标签: swift augmented-reality arkit realitykit aranchor


【解决方案1】:
  1. 尝试使用public access level,而不是internal

     extension ARView { 
    
         @objc public func handleTap(_ sender: UIGestureRecognizer) { }
     }
    
  2. 不运行 ARGeoTrackingConfiguration() 就使用 ARGeoAnchors 是没有意义的。

【讨论】:

    【解决方案2】:

    如果您使用 Apple 的 ARKit 地理跟踪示例,您可能会注意到转换是通过 Utilities.swift 中的 simd_float4x4 的扩展来访问的:

    extension simd_float4x4 {
        var translation: SIMD3<Float> {
            get {
                return SIMD3<Float>(columns.3.x, columns.3.y, columns.3.z)
            }
            set (newValue) {
                columns.3.x = newValue.x
                columns.3.y = newValue.y
                columns.3.z = newValue.z
            }
        }
    }
    

    此代码的作用是扩展数据类型 simd_float4x4,并创建一个可从 simd_float4x4 实例(例如 worldTransform.translation)访问的转换属性。

    【讨论】:

      猜你喜欢
      • 2019-11-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-09-15
      • 2017-12-23
      • 1970-01-01
      • 2014-08-15
      • 2011-04-05
      相关资源
      最近更新 更多