ARKit - 您可以在会话期间更改planeDetection吗?

时间:2018-04-27 16:31:10

标签: ios swift arkit

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

谢谢!

1 个答案:

答案 0 :(得分:1)

您可以使用新配置再次调用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”并改为检查鳄梨酱,除非你再次与收银员谈话,否则它不会改变厨房的用途。

相关问题