我有一个 popoverviewcontroller 来切换水平或垂直平面检测。我知道它是使用协议(protocol)和委托(delegate)正确传递的,但由于某种原因它不会更改配置。我更改协议(protocol)功能中的配置。
谢谢!
最佳答案
您可以通过使用新配置再次调用 run(_:options:)
来更改正在运行的 session 的配置。
如果您将 options
参数留空(或省略),并传递与当前正在运行的 session 相同类型的配置,则有关 session 的所有内容(现有 anchor 等)都将保持不变,除了您对配置所做的任何更改。
// before
let configuration = ARWorldTrackingConfiguration()
configuration.planeDetection = .horizontal
session.run(configuration)
// after
let newConfiguration = ARWorldTrackingConfiguration()
newConfiguration.planeDetection = .vertical
session.run(newConfiguration)
在这种情况下,如果您更改平面检测设置但在重新运行 session 时不删除现有 anchor ,则现有水平面 anchor 将保留在 session 中,但不会再更新。
听起来您看到的问题是您正在更改已传递给 session 的配置的属性,而不是再次将其传递给 session — 这是调用 run< 的行为
使用您的配置使更改生效。
可以这样想:ARConfiguration
就像您在三明治店使用的订购单。你勾选说你想要洋葱和蛋黄酱的方框,然后把表格交给收银员。表格在复写纸上,所以他们从背面撕下复印件并交给厨房,然后将原件还给您,这样您就可以在取餐柜台出示它来领取食物。如果你潦草地写下“蛋黄酱”并改为检查鳄梨酱,除非你再次与收银员交谈,否则它不会改变厨房的制作。
关于ios - ARKit - 你能在 session 中改变 planeDetection 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50066738/