我遇到的ARKit错误
我正在学习ARKit。
只是想我愿意分享我在其中一种练习或练习中遇到的情况。
我想做什么?
因此,关于我要完成的工作的一些背景信息。
从大图看,一旦应用启动,便已经存在一个3D白色块。 我想要做的是能够在任何平坦的表面上轻拍,并在该位置渲染或生成另一个盒子。 点击3D块,然后使该块消失。
所以,我有2个街区,对不对? 还有更多,随着我的探索。
这是逻辑代码
让我解释。
首先,我们进行一次命中测试。 如果有一个节点,或者我们实际点击了3D块,则返回该节点并将其从父节点中删除。 这摆脱了屏幕上的节点。
但是,如果我们未点击3D块,则进入if语句。 从第一条语句中,您可以看到我实际上是在尝试找出我所利用的是否是特征点(也称为平面)或Apple文档定义中的任何现实对象。
如果碰巧是一个功能点,我将调用addBox()
方法。 这将添加另一个3D块。
运行该应用程序时会发生什么?
因此,我运行了该应用程序。 在平坦的表面上轻按,然后发生了什么,在该表面上渲染了一个块,但是原始块消失了。
不应该发生。
调试时间
因此,我想出如果我尝试使用常规的if-else语句,我会清楚地看到事情,因为我所做的只是一个警卫语句,只是Swift风格的另一个if语句。
所以我尝试了这个。
以不同的方式做同样的事情。
我运行了该应用程序,发生了同样的事情,这很奇怪。 两种代码都做同样的事情。 我检查了Apple的文档,并且非常确信它应该按照我认为的方式去做。 但事实并非如此。
因此,我认为我将检查代码的其他部分。
addBox()
方法怎么样?
构建盒子和其他东西之后,这就是代码。
该代码的作用是每次调用addBox()
时addBox()
初始化一个新场景,并将该场景设置为视图的场景。
如果它每次都设置一个新场景,则意味着在调用该方法后,所有内容都将重置。 因此,每次我在平坦的表面上轻拍时,都会初始化一个新场景并添加一个块。 这可能就是为什么事情没有按计划进行的原因。
所以我将代码更改为此。
这是在现有视图的场景上添加一个块。 因此,它不会每次都重置,而只是添加一个块。
无论如何,这是我试图发表更清晰的技术文章。 希望你能理解。 谢谢阅读!