我可以从我的场景中删除一个对象吗?
Can I remove an object from my scene?
ARKit 相对较新,我想知道是否有办法在将 3D 对象放置在场景中后删除它。
我建议阅读 ARKit, SceneKit 的文档及其基本 类。
如果您不想让某个节点出现在屏幕上,您需要从场景图中移除一个节点。您需要将其从其父节点中删除。在 Apple 文档的 SCNNode - Managing the Node Hierachy 中阅读更多相关信息。
只需使用这个功能:
Swift:
node.removeFromParentNode()
Objective-C
[node removeFromParentNode];
要从场景视图中删除对象 (SCNNode),您可以使用长按手势。只需在 viewDidLoad.
中添加以下代码
UILongPressGestureRecognizer *longPressGestureRecognizer =
[[UILongPressGestureRecognizer alloc] initWithTarget:self
action:@selector(handleRemoveObjectFrom:)];
longPressGestureRecognizer.minimumPressDuration = 0.5;
[self.sceneView addGestureRecognizer:longPressGestureRecognizer];
然后像下面这样处理你的手势识别方法,
- (void)handleRemoveObjectFrom: (UILongPressGestureRecognizer *)recognizer {
if (recognizer.state != UIGestureRecognizerStateBegan) {
return;
}
CGPoint holdPoint = [recognizer locationInView:self.sceneView];
NSArray<SCNHitTestResult *> *result = [self.sceneView hitTest:holdPoint
options:@{SCNHitTestBoundingBoxOnlyKey: @YES, SCNHitTestFirstFoundOnlyKey: @YES}];
if (result.count == 0) {
return;
}
SCNHitTestResult * hitResult = [result firstObject];
[[hitResult.node parentNode] removeFromParentNode];
}
希望本文能帮助您解决问题。
谢谢
ARKit 相对较新,我想知道是否有办法在将 3D 对象放置在场景中后删除它。
我建议阅读 ARKit, SceneKit 的文档及其基本 类。
如果您不想让某个节点出现在屏幕上,您需要从场景图中移除一个节点。您需要将其从其父节点中删除。在 Apple 文档的 SCNNode - Managing the Node Hierachy 中阅读更多相关信息。
只需使用这个功能:
Swift:
node.removeFromParentNode()
Objective-C
[node removeFromParentNode];
要从场景视图中删除对象 (SCNNode),您可以使用长按手势。只需在 viewDidLoad.
中添加以下代码UILongPressGestureRecognizer *longPressGestureRecognizer =
[[UILongPressGestureRecognizer alloc] initWithTarget:self
action:@selector(handleRemoveObjectFrom:)];
longPressGestureRecognizer.minimumPressDuration = 0.5;
[self.sceneView addGestureRecognizer:longPressGestureRecognizer];
然后像下面这样处理你的手势识别方法,
- (void)handleRemoveObjectFrom: (UILongPressGestureRecognizer *)recognizer {
if (recognizer.state != UIGestureRecognizerStateBegan) {
return;
}
CGPoint holdPoint = [recognizer locationInView:self.sceneView];
NSArray<SCNHitTestResult *> *result = [self.sceneView hitTest:holdPoint
options:@{SCNHitTestBoundingBoxOnlyKey: @YES, SCNHitTestFirstFoundOnlyKey: @YES}];
if (result.count == 0) {
return;
}
SCNHitTestResult * hitResult = [result firstObject];
[[hitResult.node parentNode] removeFromParentNode];
}
希望本文能帮助您解决问题。
谢谢