首页 > 解决方案 > ARKit - 在现实作曲家中以编程方式添加“广告牌”(看相机)元素

问题描述

我正在使用 Xcode (11.3.1) 使用 ARKit 制作 AR 应用程序。我在 Reality Composer 中添加对象、文本等。然后我可以通过将场景和对象加载到ViewController.swift.

我想让这些物体中的一些不断面对相机。

我知道我可以在 Reality Composer 中添加一个观察相机的“行为”,但我不想这样做有两个原因;

a)它只允许您以这样的方式添加效果持续一定时间(最多 5 分钟)

b)我想知道如何以编程方式执行此操作。

我知道这里提供了一系列 ARKit 中的广告牌解决方案,其中大部分都包含在这个问题的答案中,但所有这些解决方案都涉及使用 SceneKit。

因此,我的问题是——是否可以在不使用 SceneKit 的情况下实现这种“广告牌”效果?有没有办法只在 RealityKit 中做到这一点?似乎有,因为您可以通过使用 Reality Composer 将其添加为行为来包含此效果(据我所知,它不需要 SceneKit,但我可能是错的)。我试图深入研究 Reality Composer 场景以了解广告牌是如何在那里实现的,但您可以在对上一个问题的回复中看到“行为”没有暴露,所以我看不出这是如何实现的。

我的“从头开始”的方法是了解相机的位置/旋转,但我太缺乏经验,不知道从哪里开始。本质上,我正在寻找相当于SCNBillboardConstraint但不使用 SceneKit,也许那是不可能的?

标签: iosswiftarkitrealitykitreality-composer

解决方案


extension Entity {
    /// Billboards the entity to the targetPosition which should be provided in world space.
    func billboard(targetPosition: SIMD3<Float>) {
        look(at: targetPosition, from: position(relativeTo: nil), relativeTo: nil)
    }
}

var subscriptions = Set<AnyCancellable>()

  arView.scene.subscribe(to: SceneEvents.Update.self) { [self] _ in
                            箭头.billboard(targetPosition: arView.cameraTransform.translation)
                         }.store(in: &subscriptions)

https://developer.apple.com/forums/thread/656611


推荐阅读