ARKit - 你能在会话中改变 planeDetection 吗?

ARKit - Can you change planeDetection while in session?

我有一个 popoverviewcontroller 来切换水平或垂直平面检测。我知道它是使用协议和委托正确传递的,但由于某种原因它不会更改配置。我更改协议功能中的配置。

谢谢!

您可以通过使用新配置再次调用 run(_:options:) 来更改 运行 会话的配置。

如果您将 options 参数留空(或省略),并传递与会话当前 运行 相同类型的配置,关于您会话的所有内容(现有锚点等)保持不变,除了您对配置所做的任何更改。

// before
let configuration = ARWorldTrackingConfiguration()
configuration.planeDetection = .horizontal
session.run(configuration)

// after
let newConfiguration = ARWorldTrackingConfiguration()
newConfiguration.planeDetection = .vertical
session.run(newConfiguration)

在这种情况下,如果您更改平面检测设置但在重新运行会话时不删除现有锚点,则现有水平面锚点将保留在会话中,但不会继续更新。


听起来您遇到的问题是您正在更改已传递给会话的配置的属性,而不是再次将其传递给会话 — 这是调用 run 使更改生效的配置。

可以这样想:ARConfiguration 就像您在三明治店使用的订单。你勾选说你想要洋葱和蛋黄酱的方框,然后把表格交给收银员。表格在复写纸上,所以他们从背面撕下复印件并交给厨房,然后将原件还给您,这样您就可以在取餐柜台出示它来领取食物。如果你潦草地写下 "mayo" 并改为检查鳄梨酱,除非你再次与收银员交谈,否则它不会改变厨房的制作。