【问题标题】:Can't preview SwiftUI Canvas with RealityKit scene无法使用 RealityKit 场景预览 SwiftUI Canvas
【发布时间】:2023-04-02 20:40:01
【问题描述】:

我只创建了 RealityKit 的一个新属性。 Xcode 将无法预览 SwiftUI 画布。 但它可以构建成功。

  1. 我通过 Xcode 创建应用程序。
  2. 选择增强现实应用并将用户界面设置为SwiftUI
  3. 项目可以正常运行。
import SwiftUI
import RealityKit

struct ContentView : View {
    var body: some View {
        return VStack {
            Text("123")
            ARViewContainer().edgesIgnoringSafeArea(.all)
        }
    }
}

struct ARViewContainer: UIViewRepresentable {

    func makeUIView(context: Context) -> ARView {

        let arView = ARView(frame: .zero)

        // Load the "Box" scene from the "Experience" Reality File
        let boxAnchor = try! Experience.loadBox()

        // Add the box anchor to the scene
        arView.scene.anchors.append(boxAnchor)

        return arView

    }

    func updateUIView(_ uiView: ARView, context: Context) {}

}

#if DEBUG
struct ContentView_Previews : PreviewProvider {
    static var previews: some View {
        ContentView()
    }
}
#endif
  1. 我只在 makeUIView 函数中创建了 RealityKit 的新属性。
let test: AnchoringComponent.Target.Alignment = .horizontal
  1. 项目无法预览画布出现错误

    “Alignment”不是“AnchoringComponent.Target”的成员类型

  1. 项目仍然可以编译成功。

我很困惑我遇到了什么。 有没有人遇到同样的问题?

【问题讨论】:

  • 我的猜测是 RealityKit 在画布上不可用,因为它太重了,所以无法导入,这就是您看到该错误的原因。另外,不要把你的代码作为图片,粘贴为文本,这样可以复制和搜索。
  • 但是如果我在另一个文件中创建一个新属性,它也无法成功构建。好的!我将代码更改为文本。谢谢
  • 如果我不添加该属性,它会预览,虽然它只显示白色画布,但我可以在这个 SwiftUI 文件上进行其他布局。

标签: swift augmented-reality swiftui arkit realitykit


【解决方案1】:

您必须解决几个问题

  1. 您不能在 iOS 模拟器SwiftUI 画布预览 中使用 anchoring component,因为它只能用于将虚拟内容固定到现实世界表面. 所以没有 AR 应用模拟器

RealityKit Anchors 在 iOS Simulator 模式和 SwiftUI Canvas Preview 模式下无用。

// Use it only for compiled AR app, not simulated...

let _: AnchoringComponent.Target.Alignment = .horizontal

不仅锚点在iOS Simulator ModeSwiftUI Preview Mode 中无用,而且您可以在图片上看到的其他面向会话的属性(包括ARView.session):

  1. 将 ARView 中的 .backgroundColor 更改为任何其他想要的。默认颜色有时不允许您看到 RealityKit 场景。看起来像一个错误。
func makeUIView(context: Context) -> ARView {

    let arView = ARView(frame: .zero)
    let boxAnchor = try! Experience.loadBox()
    boxAnchor.steelBox?.scale = SIMD3(5, 5, 5)
    boxAnchor.steelBox?.orientation = simd_quatf(angle: Float.pi/4, axis: SIMD3(1,1,0))

    arView.backgroundColor = .orange

    arView.scene.anchors.append(boxAnchor)
    return arView
}

您现在可以在 SwiftUI 预览区看到以下内容:

  1. 当然,在使用 AR 应用程序之前,您必须提供Camera Permission。使用什么并不重要:Storyboard 或 SwiftUI。

您需要在info.plist文件中添加Camera Usage Description属性和arkit字符串:

XML 版本如下所示:

/*  info.plist


<key>NSCameraUsageDescription</key>
    <string>Camera access for AR experience</string>

<key>UIRequiredDeviceCapabilities</key>
<array>
    <string>armv7</string>
    <string>arkit</string>
</array>

*/

修复这些问题后,应用程序可以按预期编译和工作(没有任何错误):

【讨论】:

  • 因为我是通过xCode创建项目并选择Augmented Reality App。所以 Info.plist 已经完成了。在我创建项目后,它可以构建成功并且可以预览 SwiftUI 画布。但是如果我使用 AnchoringComponent.Target.Alignment 甚至在另一个文件上使用,项目仍然构建成功,但它无法预览 SwiftUI 画布。
  • 我使用 iOS 的Single View App 模板(基于 SwiftUI)制作了这个应用程序,然后使用added your code,向info.plist 文件添加了一些字符串,添加了.rcproject 文件。瞧——它有效。没有错误。
  • 你能预览一下 SwiftUI 画布吗?不在设备上构建。只需在 xCode 上查看画布即可。
  • 但是你注释掉“let _: AnchoringComponent.Target.Alignment = .horizo​​ntal”。如果您使用此代码,则 SwiftUI 无法预览。 @@
  • 好的!知道了!我找到了预览画布的方法!添加#if !targetEnvironment(simulator) ... #endif。然后就可以预览了!!
猜你喜欢
  • 1970-01-01
  • 2020-07-23
  • 1970-01-01
  • 1970-01-01
  • 2019-12-28
  • 1970-01-01
  • 1970-01-01
  • 2021-01-25
  • 1970-01-01
相关资源
最近更新 更多