<맨 위로>
  • Oculus Quest2 사이드퀘스트 설치 및 활성화
  • 오큘러스 퀘스트2(Android) 개발자 모드 활성화
  • 사이드퀘스트 설치
  • 오큘러스 퀘스트2 USB 디버깅 활성화
  • Unity VR 다양한 씬 체험설명
  • Unity VR integration 스크립트 사용
  • VR Avatar 세팅
  • 오류 및 해결내용
  • Meta Quest error 메타 퀘스트 오류

    전세계 AC 전압 및 주파수 목록 한국 220V 60Hz

    https://uploadvr.com/tracking-lost-quest-2/


    1. Oculus quest 2 tracking lost guardian disabled

    • 퀘스트 다시시작
    • 경계선 재설정
    • 경계선 기록지우기
    • 카메라청소
    • 조명 및 추적설정 조정 - 기본적으로 추적 주파수는 자동설정. 지역에서 사용하는 주파수에따라 변경.

    https://uploadvr.com/tracking-lost-quest-2/


    • 공간의 큰 변화
    • 조명의 큰 변화
    • 안전보호 경계를 그릴때 의도한 플레이 공간의 중심에 최대한 가까이 섭니다.
    • 경계를 그릴때 방 여기저기를 바라봅니다.
    • 직사광선을 피합니다.

    https://store.facebook.com/ko-kr/help/quest/articles/fix-a-problem/troubleshoot-apps-and-features/troubleshoot-guardian-quest-2-quest-rift-s/


    2. Oculus Quest2 Tracking Lost Error

    • 오큘러스 퀘스트 인식 원리

      • 오큘러스 퀘스트2인 경우, 외부 추적 장치를 사용함 - 비콘이 필요없는 독립형 VR 헤드셋
      • 4개의 작은 카메라를 사용하며, IMU(관성 측정 장치)를 사용해 자이로스코프, 가속도계 및 전자 나침반을 사용해 위치의 변화 감지
      • 컴퓨터 비전과 IMU의 데이터를 사용해 주변 환경의 3D지도를 실시간 생성해 3D공간에서 자신의 위치 감지

    *비콘(beacon) 또는 비컨 : 특정 위치의 정보를 전달하기 위해 사용되는 장치. 흔한 예로는 장애물 주변을 항해하거나 항구로 들어오게끔 하기 위해 사용할 수 있는 지정된 지점에 주의를 주는 등대나 나라에 병란이나 사변이 있을 때 신호로 올리던 불인 봉수가 있다 **자이로스코프 : 항공기·선박 등의 평형 상태를 측정하는 데 사용하는 기구

    https://360rumors.com/oculus-quest-2-tracking-lost/


    주의사항

    • 시야를 가리는 것이 있거나, 주변 환경이 너무 빨리 바뀌면 추적 실패
    • 헤드셋을 조정하는 동안 손이 카메라를 부분적으로 차단하는 경우 또는 하나 이상의 카메라를 차단하는 경우
    • 헤드셋의 전원을 킨 상태에서 주변의 움직임이 많은 경우
    • 앉은 상태에서 서 있는 상태로 이동할 때, 헤드셋의 전원을 켠 상태로 많이 움직이면 추적 실패
    • 움직이는 환경에 있을 때 (예시: 배, 움직이는 방)
    • 환경이 너무 밝거나 너무 어두울 때, 방이 어둡거나 밝은 햇빛 아래에서 퀘스트2를 사용할 때, 카메라가 조명에 반응하지 못함.
    • 스크린과 모니터, 화면과 모니터는 밝기를 빠르게 변경하거나 매우 빠른 속도로 깜빡일 수 있기 때문에 혼동을 줌

    추적 손실 오류 해결법

    1. 헤드셋 확인 : 카메라를 막고 있는 게 없는 지 확인 / 많이 움직일 경우 방향을 잡을 때 움직임 최소화
    2. 컨트롤러를 헤드셋 가까이에 두고 전면에 두기 / 손 추적을 즉시 사용하지 않기
    3. 조명이 적절한 방에 있는 확인 / TV나 컴퓨터 화면을 향하고 있으면 멀리 하거나 화면 끄기 / 실내로 이동하기
    4. 보호자 기록 삭제
    5. 추적을 다시 켜기
    6. 백업 파일 및 공장 초기화

    1. 추적을 방해하는 물건이 많은 경우(전원 케이블, 가전 제품, 형광등, 다양한 무선장치 등), 평평한 표면 또는 물건이 없는 방에서 시도
    2. 핸드 트래킹 끄기(일부 경우 발생하는 소프트웨어 릴리스에서 추적 문제)
    3. 헤드셋이 절전모드 상태일 때 추적을 시작하면 에러 발생 확률이 높음. 평소에는 대기모드보다는 헤드셋을 끄는 것을 추천
    4. 추적 빈도 변경(주파수)
    5. 헤드셋과 컨트롤러를 바닥에 놓고 1분동안 켜놓기(방을 안정적으로 맵핑하는 방법)
    6. 컨트롤러 배터리 교체
    7. 오큘러스 장치 업데이트

    https://smartglasseshub.com/quest2-tracking-lost/


    3. 트래킹 실패 시 추적 주파수 변경 이유

    가정에서 사용하는 교류(AC)전기의 전압과 주파수가 국가에 따라 다르다. 일반적으로 120볼트 AC 또는 240 볼트 AC가 사용된다. 대부분 국가에서는 AC주파수로 50Hz(초당 50Hz 또는 50사이클) 사용한다.

    미국의 표준은 120V 및 60Hz AC전기 남한 표준은 220v 60Hz Hz : 초당 주기 , 추적 주파수 : 헤드셋이 추적 목적으로 위치를 이전 것과 비교하는 빈도

    https://www.school-for-champions.com/science/ac_world_volt_freq_list.htm#.YudwZnZBzZR https://www.reddit.com/r/OculusQuest/comments/g39xjo/what_does_tracking_frequency_do/


    헤드셋 추적주파수가 50Hz일 때, 초당 50번씩 위치를 확인하라 지시함. 1초당 50번 헤드셋은 사용자의 위치와 향하고 있는 방향의 변화에 적응함.

    만약 헤드셋 추적주파수를 1Hz로 설정할 수 있다면, 헤드셋은 1초당 한번만 추적할 수 있다는 뜻이다. 따라서 움직이거나 반응하는 과정에서 헤드셋은 1초에 한번만 업데이트를 하기 때문에 지연이 생긴다.

    전력 시스템의 주파수가 50Hz일 때는 방의 전등이 1초당 50번 켜지고 꺼진다는 뜻이다. 헤드셋의 추적 주파수를 50Hz라고 설정했을 때는 Hz가 같기 때문에 올바르게 보인다. 하지만 전력시스템이 60hz일 때, 헤드셋을 50hz로 설정하면 속도를 따라갈 수 없어 지연되어 보이거나 추적을 실패하게 된다.


    • 결론: 국가마다 전력 시스템이 다르고, 추적 주파수를 다르게 설정하면 추적 실패할 수 있다. 한국은 전력 시스템이 60Hz인데,

    헤드셋의 추적 주파수를 50Hz로 할 경우, 전등에서 나오는 빈도(1초당 60번)와 헤드셋 추적 빈도(1초당 50번)가 다르기 때문에

    지연이 생겨 추적에 실패하게 된다. 추적 주파수는 국가의 전력 시스템보다 같거나 높은 Hz로 설정할 것.


    9. 사이드퀘스트 오류모음

    • 이전 버전을 안 지우고 설치하는 경우 :

    : 원래 있던 유니티 앱을 폴더에서 삭제하고 다시 설치


    목차

    • 오큘러스 간단한 용어 설명

    • 캐릭터 모델링 Unity로 import

    • 트리거 기능(가방안에 물건 고정하기)
    • 오큘러스 퀘스트2 세팅 + 핸드 트래킹 절차 안내
    • Oculus Quest2 사이드퀘스트 설치 및 활성화
    • Unity VR 다양한 씬 체험설명
    • HandTrackingEvent
    • Scene 이동
    • 오류 및 해결내용

    오큘러스 간단한 설명

    • VR(가상현실): 현실과는 다른 가상세계에서 실제같은 경험을 느낄 수 있는 기술
    • Oculus link: 케이블을 통해 PC와 연결할 수 있는 기능(PC VR모드로 전환)
    • PassThrough: 고글에 탑재된 카메라를 통하여 주변환경을 흑백으로 송출해주는 기능
    • Chrome Cast: 폰, 탭, 노트북, VR 등 다양한 디스플레이 기기들을 TV로 송출 수있도록 도와주는 하드웨어 기기
    • Oculus Developer Hub: 오큘러스 퀘스트에서 앱을 개발하거나 라이브 스트리밍을 더 편리하게 사용할 수 있는 PC어플
    • 룸 스케일 경계 / 고정 경계: 오큘러스같은 VR을 사용하기 위해선 임시 공간

    TouchGrab(자유자재로 잡기 기능)

    • game object(1)를 만들고 물건의 이름으로 변경.
    • Touch hand Grab Interactable, Rigidbody, Grabbable, Physics Grabbable, Respawn On Drop을 추가.
    • 그 안에 모델링 된 물건을 넣는다.
    • 그리고 그 안에 game object(2)를 하나 더 만들어서 물건이름_collider 으로 변경.

    game object(2)에 mesh filter을 추가하여 mesh에 cube를 넣고(mesh filter가 이미 있다면 넣지말것), box collider을 추가하여 edit collider를 누르고(또는mesh collider 추가)


    물건에 최대한 맞게 박스를 조정.


    다시 game object(1)로 가서 위 사진과 동일하게 설정한다. Touch Hand Grab Interactable - Pointable Element에 game object(1)을 드래그드롭


    bounds collider에 game object(2)를 드래그드롭 Grabbable - Transfer On Second Selection 체크 Physics Grabbable - Grabbable과 Rigidbody에 game object(1)드래그드롭 Respawn On Drop - 0.1로 설정 (만약 Rigidbody에 Use Gravity가 꺼져있다면 꼭 체크하기)


    Colliders 만들기 (HullPart)

     1. game object(2)는 잡을 수 있는 범위였다면 이번에 제작하는 것은 잡을 수 있는부위이다. 물건에 Mesh Collider을 추가.

    1. Mesh Collider - Convex 체크 물건에 부착되어 있는 부분(단추, 끈 등)도 잡는기능을 추가하고 싶다면 위 방법을 반복.

    예시)


    다시 game object(1)으로 돌아가서 Touch Hand Grab Intereactable - Colliders 에서

    1. 물건 포함 파츠들의 총 수
    2. Hierachy에서 HullPart들을 하나씩 드래그드롭 (만약 잡는 부분이 서로 다른위치에 있다면 touch hand grab interactable 스크립트를 하나 더 추가하여 기능을 넣는다)

    오류보완>collider가 충족되지 않을 경우

    이 경우, Bounds Collider가 none 또는 Colliders가 none 이였기에 발생하는 오류로, 게임이 전혀 작동되지 않는다.


    OVR Build - 빌드에서 핸드트래킹 기능이 작동되지 않는다면?

    Hierachy - Headset(VR카메라) - OVR Camera Rig - Inspector - 내려가면 Quest Features - Hand Tracking Support - Controllers and Hands로 바꾸기


    Convex 오류

    touch hand grab interactable을 추가하여 bounds collider와 colliders - element0 에 가방hierachy를 모두 넣는다.


    담기는 기능을 넣는 방법

    필요한 것: 오브젝트의 mesh와 모델링 파츠들


    오브젝트가 잘 안잡히는 이유

    • 사이즈가 너무 커서 잡는 범위 또한 커져서 어렵기 때문
    • 범위를 작게 잡았기 때문에
    • 등록한 ‘잡을  수 있는 부위’가 너무 작게 지정되었거나 부위의 콜라이더를 잘못 설정했기 때문

    잡기 기능 늘리기-ex))마스크


    1. mask_collider 에 가장 위에 있는 콜라이더를 없앤다
    2. mask - inspector - touch hand grab interactable - colliders - element +버튼누르고 추가 - mask_collider을 element3에 끌어넣는다

    3. mask_collider (2)에서 is trigger 체크한다 - istrigger로 지정해 두면 모델링 부위까지 손이 닿고 잡아야 잡히는 자연스러운 기능을 넣을 수 있다.(안할 시 콜라이더 부분이 먼저 인식되어 손에 쉽게 밀려나가고 부자연스럽다)

    트리거 기능(가방안에 물건 고정하기)


    1. 가방오브젝트에 gameobject(이름:collider)
    2. rigidbody추가에 IsKinematic체크하고, box_collider을 가방내부에 맞춰 생성하고 IsTrigger 체크를 한다.(가방의 모델링이 박스가 아닌 다른 유형을 갖고 있다면 가방 내부 모델링을 받아 콜라이더로 지정하거나 전반적인 사이즈로 지정하나 들어간 사물들이 가방을 뚫고 있을 수 있다)

    1. 스크립트 BagInScript를 생성한다.(Teams 파일에 업로드됨) Card_collider에는 들어갈 사물의 collider, Card_g에는 사물(gameobject), In_target에는 가방, Out_target에는 사물의 부모를 지정한다.
    2. 물건이 plane 부분에 가까우면 리스폰되기 때문에 plane을 낮추거나 수치를 조정해야한다
      • 가방안에 물건이 들어갈 시 parent가 정상적으로 작동되지만 들어가있는 물건은 잡기기능이 비활성화되어있다.
    3. 콜라이더 작용으로 인해 손으로 물건을 들어올릴 시 ‘card out bag!’ 로그가 뜨며 잡기기능이 정상작동 된다. (OnTriggerExit:b_l_() - 손으로 가방에 상호작용을 할 때 마다 로그가 뜨는 현상이 있다.)

    오큘러스 퀘스트2 세팅 + 핸드 트래킹 절차 안내


    유니티 허브 다운로드(Download)

    • Unity Hub 다운로드 클릭 → UnitySetup 설치

    유니티 버전 설치


    1. 플랫폼(PLATFORMS)에서 Android Build Support, Android SDK & NDK Tools, OpenJDK 선택하기
    2. 계속(Continue)

    3. 약관 동의 → 설치

    ※ 해당 버전이 없을 경우


    VR 프로젝트 생성

    1. 유니티 허브(Unity Hub) 메인 창
    2. 좌측 메뉴바의 프로젝트 클릭
    3. 새 프로젝트(New project)
    4. VR (템플릿 없을 경우 템플릿 다운로드 클릭)
    5. 프로젝트 이름(Project Name)
    6. Basic VR →위치(Location)
    7. 파일 위치는 원하는 곳에 지정
    8. 프로젝트 생성(Create Project)

    프로젝트 생성 후

    1. Project > Assets > Scene 으로 이동 → 우클릭 → Create → Scene 생성(이름은 VR Basic)
    2. 더블클릭하여 씬(Scene) 들어가기
    3. VR Basic 씬(Scene)
    4. 3D Object
    5. Plane 생성하기

    1. Hierarchy창에 Main camera 삭제(Delete)
    2. Project창에 grid 검색 후 창에 보이도록 세팅

    Oculus Integrations 설치

    1. Window에서 Asset Storer

    1. Oculus integration 검색

    1. Oculus integration 클릭
    2. 에셋 다운로드(Asset download)
    3. Unity에서 열기(Open Unity)
    4. 유니티 에디터 열기(유니티에서 Package Manager 실행) (Sign in을 해야 다운로드 가능)

    Oculus integration 클릭 → Download → Import


    알림창 - Yes > Cancel > Ok > Restart > Upgrade → 유니티 재시작 후 Import 완료


    만약 알림창이 Upgrade가 아닌 경우

    • Show Assets (Recommended) > Delete Assets (Recommended) - Upgrade로 변경 완료

    # VR 카메라 추가

    1. Project Scenes(꼭 VR Basic씬 안에서 검색해야 함)
    2. OVRCameraRig 검색 → Hierarchy창에 드래그
    3. Headset으로 이름 변경

    1. HeadSet 클릭 → OVR Manager (Script) →
    2. Tracking Origin Type - Floor Level 설정 →
    3. Hand Tracking Support - Hands Only, Hand Tracking Frequency - MAX 로 설정

    # VR 핸드 추가

    1. Project -Scenes - OVRHandPrefab 검색
    2. LeftHandAnchor, RightHandAnchor에 각각 OVRHandPrefab을 드래그하여 추가

    1. OVRHandPrefab 를 각각 LeftHand, RightHand로 이름 변경

    1. LeftHand 클릭 → OVR Skeleton 스크립트 > Update Root Scale 체크
    2. Enable Physics Capsules 체크
    3. OVR Mesh 스크립트 > Mesh Type - Hand Left 설정

    1. RightHand 클릭 → OVR Skeleton 스크립트 > Update Root Scale 체크, Hand Right 설정
    2. Enable Physics Capsules 체크
    3. OVR Mesh 스크립트 > Mesh Type - Hand Right 설정

    Oculus Quest2 사이드퀘스트 설치 및 활성화

    1. 오큘러스 개발자 계정 등록하기


    • 단체 만들기 → 단체 이름 설정 → I understand 체크하기 → 제출 클릭 → 동의함(개발자 비밀 유지 동의서) 클릭 → 제출

    • 페이스북 로그인 아이디가 번호(본인 휴대폰)계정이 아닐 때, Oculus페이지 내에 번호 추가하기


    오큘러스 퀘스트2(Android) 개발자 모드 활성화

    Oculus 앱 → 메뉴 → 기기 → 개발자 모드 → 개발자 모드 ON


    사이드퀘스트 설치

    링크 Advanced Installer ( LTS ) 버전으로 설치 (Easy Installer(Beta)는 테스트용이기 때문에 쓰지 말 것) DOWNLOAD FOR WINDOWS 설치


    오큘러스 퀘스트2 USB 디버깅 활성화

    • 퀘스트2 옆면에 있는 USB단자에 USB-C 케이블을 꽂아 PC와 연결 → VR에서 USB 디버깅 활성화 문구 동의(문구가 뜨지 않을 경우 재부팅)

    디버깅 활성화 시 사이드 퀘스트 상단 아이콘이 주황불에서 초록불로 변경 후 VR 내에서 해당 문구가 뜹니다.

    USB 디버깅을 허용하시겠어요? (허용 클릭) / 데이터 액세스 허용합니다. 허용


    1. 사이드 퀘스트에서 상단 메뉴 TV 모양 아이콘 클릭
    2. 해당 창이 뜸
    3. QUEST 2 CROP 클릭
    4. START STREAM 클릭

    Unity VR 다양한 씬 체험설명

    Assets > Oculus > Interaction > Sameples > Scenes > Examples 로 들어가기


    1) DistanceGrabExamples

    • 멀리 있는 물체를 집을 수 있고, 표시되는 UI가 사물마다 다름.

    2) GestureExamples

    • 오브젝트와 핸드트래커에 강한 충격을 주면 색이 변함

    3) HandGrabExamples

    • 오브젝트를 잡을 때 빛이 밝아짐
    • 횃불의 불이 따라오는 효과
    • 손의 각도에 따라 컵을 다르게 집음

    4) PokeExamples

    • 빨간 버튼을 누를 수 있는 기능(UX.UI 참고)
    • 버튼 오버 기능(오버했을 때 색이 밝게 변화)
    • 스크롤 기능
    • 다양한 위치의 버튼 UI

    5) PoseExamples

    • 손 제스처에 따른 다양한 이펙트 효과

    6) RayExamples

    • 인터페이스 불투명 정도

    7) TouchGrabExamples

    • 중력 적용 오브젝트, 미적용 오브젝트

    8) TransformExamples


    • 문 열기 기능

    • 오브젝트를 다른 오브젝트 안에 넣기

    • 이미지 갤러리를 볼 수 있는 인터렉션 기능

    Oculus Build하기

    Oculus - OVR Build - OVR Build APK And Run 하는 이유 : Pc로만 Unity를 재생하기 때문에 실제 VR앱에서 제대로 작동되는 지 확인하기 위함.


    VR기기 착용 후 설정에 오큘러스 링크 연결이 나오지 않을 경우

    • VR 기기의 전원을 끄고 다시 키기

    • PC에 있는 오큘러스 앱 계정 로그아웃 후 재로그인 #### 설정 높이가 너무 높을 경우 VR 영역에서 벗어난 후 다시 높이 설정

    • 높이 설정할 때 컨트롤러를 최대한 바닥에 가깝게 둘 것


    #### 핸드트래킹이 인식이 잘 안될 때

    • 컨트롤러를 최대한 멀리 둔 후, 뒤집기

    #### 유니티 버전 재설치 후, failed to delete old unity installation files라는 에러가 발생할 때

    • C:\Program Files\Unity\Hub\Editor\2019.2.6f1\Editor\Data\PlaybackEngines\ 위에 경로로 가서 AndroidPlayer 폴더 삭제하기

    유니티 오큘러스 빌드 과정에서 Gradle 오류가 발생했을 때

    Gradle build failed 오류가 발생했을 경우 - 유니티 프로젝트 폴더명과 경로가 한글로 되어 있을 경우 영어로 수정할 것


    변경 후에도 Gradle build 오류 해결이 안될 경우

    • 유니티 종료
    • C:\Users\사용자.gradle\caches 안에 폴더 다 지우기
    • C:\Users\nomea\AppData\LocalLow\해당 패키지 이름 폴더째로 삭제
    • 재부팅

    Project Settings - Player - Publishing Settings - Build - Custom Base Gradle Template 체크하기


    Null 오류가 발생했을 때


    키코드 설정하기 (보안 강화)

    • Project Settings - Player - Publishing Settings - Project Keystore - Password 입력(키코드를 이미 보유했을 경우)
    • Project Settings - Player - Publishing Settings - Keystore Manager… - 키코드 생성 후 1번 방법으로 하기 (키코드가 없을 경우)

    Unity VR integration 스크립트 사용

    Interactable Unity Event Wrapper Script 사용 (Interactable View에 해당 게임오브젝트(자기 자신)를 드래그 드랍하기) When Select() 손으로 오브젝트를 집었을 때 When Unselect() 손으로 오브젝트를 놓았을 때 When Interactors Count Updated() 오브젝트가 충돌했을 때


    참고용링크​​​​​​​ Scene 전환시 OVR Camera rig는 각 scene에서 새로 연결 하도록 하고. DonDestroyOnLoad에 올리지 않는다.


    VR Avatar 세팅

    유니티링크​​​​​​​

    avatar sdk 다운로드 주소

    avatar sdk 적용방법 유튜브 주소


    sdk 적용방법에서 null 파일에 스크립트 적용시 error 메세지

    Multiple precompiled assemblies with the same name Newtonsoft.Json.dll included on the current platform. Only one assembly with the same name is allowed per platform. (C:/test/Library/PackageCache/com.unity.nuget.newtonsoft-json@3.0.2/Runtime/Newtonsoft.Json.dll)


    스크립트 적용시 뜨는 메세지


    리다운로드를 위해 파일을 삭제하니까 뜬 창


    그 외 제공되는 vr프로젝트 play 하는 법, 오큘러스 플랫폼 설치 등

    스크립트 오류로 진행 어려움


    오류 및 해결내용

    • OnTriggerEnter 이벤트를 위해서는 두 객체 중 하나 이상에 rigged body가 있어야 한다. 룸스케일시 각 scene의 시작지점을 맞추어야한다. (추가 고려대상) world space에서 ui를 띄우다 보니 z위치에 따라 모델링과 관통됨.