은빛 탐험가 클린 버전

은빛탐험가 앱아이콘


고령층의 디지털 격차 문제를 해결하기 위해 개발한 AR 기술을 활용한 체험형 디지털 교육 어플리케이션입니다. 고령층의 디지털 기기 및 기술에 대한 체험을 탐험이라는 컨셉으로 잡아 “은빛 탐험가”라는 이름으로 기획하였습니다.

🗄️ 프로젝트 정보

  • 기간 : 2023.07.18 ~ 2023.08.18 (1개월) -> 리팩토링 기간 2024.01.18 ~ 2024.05.07 (약 4개월)

  • 개발 인원 : iOS 4명

  • 기술 스택 : UIKit(Codebase UI) ARKit SceneKit Combine CoreML VisionKit Vision

  • 프로젝트 주요 기능

    • AR 기술을 활용해 3D 캐릭터와 함께 단계별로 다양한 터치 제스처에 대해 체험하고 학습할 수 있는 기능
    • 각각의 터치 제스처에 따른 3D 캐릭터의 애니메이션 동작 기능
    • 실제 카페 키오스크 UI를 통해 메뉴 선택부터 스탬프 적립, 결제까지 키오스크 주문에 대해 체험하고 학습할 수 있는 기능
    • AR 기술을 활용해 3D 키오스크 기기의 카드 투입구나 바코드 리더기 위치를 확인할 수 있는 기능
    • 사물의 작은 텍스트를 인식해 큰 텍스트로 변환하여 보여주는 OCR 기능
    • 인식된 텍스트를 음성으로 들려주는 TTS 기능

    터치 제스처 탐험하기 키오스크 탐험하기 AI 탐험하기


🧰 담당 기능 구현 방법

터치 제스처 탐험하기

  • ARKit을 활용해 3D 캐릭터와 함께 단계별로 다양한 터치 제스처를 체험하는 기능
  • Tap, LongPress, Swipe, Pan, Pinch, Rotate 제스처에 대해 SceneKit을 활용한 3D 캐릭터 애니메이션 구현

키오스크 탐험하기

  • Codebase UITableView, UICollectionView, UISegmentControl, UIStackView 등을 활용해 실제 카페 키오스크 UI를 구현하여 메뉴 선택부터 스탬프 적립, 결제까지 체험할 수 있는 기능
  • AR과 터치 제스처를 활용하여 키오스크 기기 자체에 대한 체험을 할 수 있는 기능

📌 고려 사항

ARKit의 오브젝트 렌더링 위치 결정 방식

  • 고민 지점

    • ARWorldTrackingConfiguration은 수평면이나 수직면을 자동으로 인식하여 해당 평면의 특정 좌표에 렌더링
    • 평면을 잘 인식하기 위해선 평면과의 거리를 벌리기 위해 고령층이 아이패드를 높게 들어야 하는 UX적 단점 존재
  • 결과

    • ARImageTrackingConfiguration을 사용하여 평면이 아닌 특정 사물의 이미지를 인식하여 인식된 사물 위에 렌더링하는 방식으로 결정
    • 이로써 아이패드를 들지 않고 폴리오 케이스나 거치대를 사용하여도 오브젝트의 렌더링 위치를 결정 가능
    • 은빛 탐험 티켓을 제작하여 오브젝트 렌더링용 사물의 역할과 동시에 어플리케이션의 컨셉 강화 도구로 사용

    은빛탐험티켓

MVC 아키텍처

  • 고민 지점

    • 모든 코드가 ViewController에 존재함으로써 ViewController가 많은 책임을 가지게 됨
    • 따라서, 적절한 역할 분리를 통해 ViewController의 책임을 덜어내고자 MVC 아키텍처 적용
  • 결과

    Model View
    Model View
    Model과 ViewController간에 옵저버 패턴 적용 User Action을 ViewController에 전달 및 UI 업데이트를 계층적으로 수행

    Controller(ViewController)
    VC
    Delegate 패턴을 통해 RootView로부터 User Action을 전달받고 Model 변경
    Model의 변화를 감지 후 RootView에 UI 업데이트 지시

3D 오브젝트에 대한 POP

  • 고민 지점

    • 3D 오브젝트 객체의 추상화를 통해 다형성을 활용하기 위한 설계
    • 인터페이스 분리 원칙을 준수한 프로토콜 설계
  • 결과

프로토콜 설계

🚨 주요 이슈와 해결 과정

터치 제스처 탐험하기에서 단계별 UIGestureRecognizer와 SceneKit Animation간의 동기화 이슈

  • 문제 상황

    • 다양한 UIGestureRecognizer와 그에 맞는 SceneKit Animation 메서드들이 단계에 따라 추가되고 사라져야함
    • 관련 코드들이 여러 파일에서 복잡하게 얽혀 있어 상태 관리에 어려움을 겪음
  • 해결 방식

    • 상태 패턴 사용