我遇到的ARKit错误

我正在学习ARKit。

只是想我愿意分享我在其中一种练习或练习中遇到的情况。

我想做什么?

因此,关于我要完成的工作的一些背景信息。

从大图看,一旦应用启动,便已经存在一个3D白色块。 我想要做的是能够在任何平坦的表面上轻拍,并在该位置渲染或生成另一个盒子。 点击3D块,然后使该块消失。

所以,我有2个街区,对不对? 还有更多,随着我的探索。

这是逻辑代码

让我解释。

首先,我们进行一次命中测试。 如果有一个节点,或者我们实际点击了3D块,则返回该节点并将其从父节点中删除。 这摆脱了屏幕上的节点。

但是,如果我们未点击3D块,则进入if语句。 从第一条语句中,您可以看到我实际上是在尝试找出我所利用的是否是特征点(也称为平面)或Apple文档定义中的任何现实对象。

如果碰巧是一个功能点,我将调用addBox()方法。 这将添加另一个3D块。

运行该应用程序时会发生什么?

因此,我运行了该应用程序。 在平坦的表面上轻按,然后发生了什么,在该表面上渲染了一个块,但是原始块消失了。

不应该发生。

调试时间

因此,我想出如果我尝试使用常规的if-else语句,我会清楚地看到事情,因为我所做的只是一个警卫语句,只是Swift风格的另一个if语句。

所以我尝试了这个。

以不同的方式做同样的事情。

我运行了该应用程序,发生了同样的事情,这很奇怪。 两种代码都做同样的事情。 我检查了Apple的文档,并且非常确信它应该按照我认为的方式去做。 但事实并非如此。

因此,我认为我将检查代码的其他部分。

addBox()方法怎么样?

构建盒子和其他东西之后,这就是代码。

该代码的作用是每次调用addBox()addBox()初始化一个新场景,并将该场景设置为视图的场景。

如果它每次都设置一个新场景,则意味着在调用该方法后,所有内容都将重置。 因此,每次我在平坦的表面上轻拍时,都会初始化一个新场景并添加一个块。 这可能就是为什么事情没有按计划进行的原因。

所以我将代码更改为此。

这是在现有视图的场景上添加一个块。 因此,它不会每次都重置,而只是添加一个块。


无论如何,这是我试图发表更清晰的技术文章。 希望你能理解。 谢谢阅读!