본문 바로가기
안드로이드 자바

[JAVA][Android] AR core 객체를 삭제하는 법

by teamnova 2021. 9. 8.
728x90

이번 포스팅에선 AR core 앱 안에 생성되는 3D 객체의 크기를 늘리고 줄이는 법에 대해 설명하겠습니다.

이전 글에 이어서 진행되는 포스팅이니 아직 AR core 포스팅을 보지 않으셨다면 먼저 보고 오시는 걸 추천드립니다.

https://stickode.tistory.com/203

 

이 포스팅에서 사용된 코드는 아래의 스틱코드 포스팅에서도 확인할 수 있습니다.

https://stickode.com/detail.html?no=2418 

 

스틱코드

 

stickode.com

 

onCreate()를 보면 프래그먼트 설정 후, ModelRenderable로 3D 모델을 만든 다음 프래그먼트를 터치했을 때 3D 모델을 띄우는 걸 알 수 있습니다.

이제 화면에 띄운 3D 객체를 삭제하는 방법을 알아보겠습니다. 먼저 아래의 코드를 봐 주세요.

// 화면을 탭해서 3D 객체 생성
        arFragment.setOnTapArPlaneListener(
                (HitResult hitResult, Plane plane, MotionEvent motionEvent) ->
                {
                    if (andyRenderable == null)
                    {
                        return;
                    }

                    // Anchor 생성
                    Anchor anchor = hitResult.createAnchor();
                    AnchorNode anchorNode = new AnchorNode(anchor);
                    anchorNode.setParent(arFragment.getArSceneView().getScene());

                    // andy를 만들고 Anchor에 추가
                    TransformableNode andy = new TransformableNode(arFragment.getTransformationSystem());
                    andy.setParent(anchorNode);
                    andy.setRenderable(andyRenderable);

                    // 3D 객체를 탭할 시 해당 객체를 화면에서 지운다
                    andy.setOnTapListener((HitTestResult result, MotionEvent event) -> {
                        Node nodeToRemove = result.getNode();
                        if (nodeToRemove != null)
                        {
                            anchorNode.removeChild(nodeToRemove);
                        }
                    });
                });

 

프래그먼트를 탭해서 3D 객체를 만들고, 그 객체에 다시 setOnTapListener()를 호출하는 걸 볼 수 있습니다.

그 안에서 HitTestResult에 담긴 3D 객체를 가져와 Node 객체에 매핑한 다음, null 체크 후 removeChild()의 매개변수로 Node 객체를 넘기는 걸 볼 수 있습니다.

결국 andy.setOnTapListener((HitTestResult result, MotionEvent event) 안의 코드를 통해서 화면의 3D 객체를 삭제하는 겁니다.

이렇게 onCreate()를 수정한 후 앱을 빌드하면 아래와 같은 화면을 볼 수 있습니다.