아카데미 NC2 프로젝트때의 미션인 2주만에 키트를 공부하고, 프로젝트완성하기의 일환으로 ARKit, SceneKit 를 배웠습니다. (참고로 아카데미가 끝난 후 앱이 배포 완료된 상태입니다)
이때 정리해서 아카데미내에 공유했던 글을 정리해서 배포합니다 :)
총 5편+9편 으로 구성 되어있습니다.
1) 5편의 시리즈가 끝난 후에는
2) 기능별 코드를 한줄한줄 주석을 포함해 9편(8+보너스)으로 공유할 예정입니다.
[코드조각으로 이해하기][1편] ARKit 기초 설정 및 SCNScene 개념 소개
첫 번째 코드 조각 + AR 환경 설정 코드 + SCNScene 설명
[2편] 오브젝트 불러오기 & SCNReferenceNode 이해하기
두 번째 코드 조각 + 오브젝트 올리는 코드 + SCNNode 개념
[3편] 제스처: 탭으로 오브젝트 조작하기
세 번째 코드 조각 + 탭 제스처 핸들링
[4편] 제스처: 복잡한 노드 반복 제어하기
네 번째 코드 조각 + 롱프레스 제스처 핸들링 + Feu노드 컨트롤 예시
[5편] 팬/핀치 제스처로 오브젝트 이동/확대하기 & 정리
다섯 번째 코드 조각 + 팬/핀치 제스처 핸들링
[기능별 코드(주석포함)으로 이해하기][1편][AR 환경 설정을 위한 기본 구성]
ARKit과 SceneKit을 결합한 View 설정
ARWorldTrackingConfiguration을 통한 디바이스 위치 및 방향 추적
사람 인식 및 객체 감지를 위한 프레임 시맨틱 설정
AR 세션 초기화 및 기존 트래킹 정보 제거
[2편][SCNScene과 SCNView 초기 설정]
SCNScene 인스턴스 생성
SCNView에 Scene을 바인딩
인벤토리 버튼, 제스처 등록 준비
[3편][USDZ 오브젝트 불러오기 및 배치]
기존 노드 제거
SCNReferenceNode를 사용한 외부 모델 불러오기
모델 위치 조정 및 스케일 설정
씬에 노드 추가
조명 재설정 및 사운드 실행 포함
[4편][제스처 인식기 등록]
탭(Tap) 제스처
팬(Pan) 제스처
핀치(Pinch) 제스처
롱프레스(LongPress) 제스처
[5편][제스처 처리 함수 구현]
팬 제스처로 오브젝트 이동
핀치 제스처로 오브젝트 크기 조정
탭 제스처로 오브젝트 숨기기/보이기
롱프레스 제스처로 오브젝트 애니메이션 실행
[6편][SceneKit의 핵심 클래스 개념 정리]
SCNScene: 3D 씬 구조 및 속성 컨테이너
SCNView: 3D 콘텐츠를 렌더링하는 뷰
SCNNode: 씬 구조를 구성하는 기본 단위
SCNReferenceNode: 외부 파일을 참조하여 노드 불러오기
[7편][AR 구성 관련 클래스와 설정 설명]
ARWorldTrackingConfiguration을 통한 6자유도(6DOF) 추적
ARConfiguration의 기본 설정 개념
frameSemantics로 사람 인식 추가 옵션 설정
[8편][SceneKit 애니메이션 처리 기초]
SCNTransaction을 활용한 애니메이션 트랜잭션 처리
setAnimationDuration을 통한 암시적 애니메이션 적용
커스텀 트랜잭션으로 고급 애니메이션 구성
SCNVector3 구조체를 사용한 위치·크기 계산
[보너스][제스처 구현 시 참고할 팁과 세부 동작 이해]
hitTest를 사용하여 터치 지점의 노드 탐지
선택된 노드의 최상위 부모 노드를 찾아 전체 모델 이동 가능하게 설정
translation 값을 활용한 위치 변화 계산
delaysTouchesBegan 속성으로 터치 이벤트 처리 방식 조절
제스처 상태(state)에 따른 분기 처리: began, changed, ended, cancelled