我使用iOS 11 ARKit开发了一个POC(Scenekit- https://developer.apple.com/sample-code/wwdc/2017/PlacingObjects.zip)。当我尝试使用相机放置3D物体时,它会检测水平面并放置它。
但是我能够将物体放置在任何地方(比如在空中),即使它没有检测到不适合的水平面也不是理想的场景。
是否可以限制用户,使对象只能放置在有效的水平平面,如地板而不是其他任何地方?那就是我想要检测地板的高度并将物体放在有效的飞机上方,而不是在空中。
答案 0 :(得分:1)
您可以通过指定匹配测试选项ARHitTestResult
来限制ARHitTestResultTypeExistingPlaneUsingExtent
用户触摸事件。
CGPoint tapPoint = [recognizer locationInView:self.sceneView];
NSArray<ARHitTestResult *> *result = [self.sceneView hitTest:tapPoint types:ARHitTestResultTypeExistingPlaneUsingExtent];
然后将对象放置在ARHitTestResult.worldTransform
中指定的位置。
这将确保用户只能将对象放置在ARKit检测到的平面上。