XR플밍 - 10. XR 애플리케이션 개발을 위한 VR/AR 프로그래밍 - 컨트롤러(Interactor, Interactable), 핸드트래킹 (6/11)

이형원·2025년 6월 11일
0

XR플밍

목록 보기
101/215
post-thumbnail

1. Interactor 세부 내용

1.1 Interaction의 Layer Mask

Ray Interactor과 Teleport Interactor의 LayerMask를 비교해보자.

Ray는 Default Layer만 인식하고, Teleport는 Teleport만 인식하게 되어 있다.
이와 같이 특정 목적에 있는 레이어는 그 목적에 맞는 레이어에 맞게 설정해주어야 하고, 레이어 설정이 잘못되었을 시 오작동할 가능성이 있다.

또한 이와 같이 Interaction Layer를 따로 설정할 수 있으며, 예를 들어 Left랑 Right Layer를 따로 만들고, 왼쪽 컨트롤러에만 Left Layer를 달고, 오른쪽 컨트롤러에만 Right Layer를 달아본다고 하자.

오브젝트의 LayerMask를 설정하여 왼쪽으로 설정하면, 왼쪽 컨트롤러만 해당 물체를 들 수 있고 오른쪽 레이어로만 설정하면 오른쪽으로만 해당 물체를 들 수 있다.

이를 잘 응용하면 특정 손에만 들 수 있는 물건 - 총의 개머리판 부분은 무조건 오른손으로 잡게 하는 등의 상호작용이 가능할 것이다.

1.2 Ray Interactor 세부 기능

  • Force Grab : 기본적으로 해제되어 있으며, 해제되어 있을 경우에는 Ray 기점으로 물체를 인식한 지점에서 물체를 Grab한다. 하지만 이 기능이 활성화되어 있으면 물체를 잡아서 끌어오게 된다.

  • Audio Event : 조건에 따라 효과음을 낼 수 있다.

  • Haptic Event : 컨트롤러의 특정조건에 따라 진동을 줄 수 있다.

1.3 Direct Interactor

가까이에서 무언가를 잡을 때 사용한다.

  • Attach Transform : Direct Interactor는 따로 설정하지 않으면 그 컨트롤러 자리에 생성되는데, 특정 오브젝트를 잡는 행위를 할 때 이 부분을 미리 설정하는 것이 좋다.

1.4 Poke Interactor

  • UI와 상호작용하는 부분은 여기에서 처리한다.

VR에서는 UI 를 월드 스페이스에 배치할 필요가 있다.

2. Interactable

컨트롤러의 조작에 의해 잡혀야 할 물체에 해당 컴포넌트를 부여한다.

이와 같이 컴포넌트를 추가하면 해당 물체를 컨트롤러로 잡을 수 있게 된다.
여기서 물체가 잡히는 부분을 따로 설정할 수 있는 방법이 Collider를 설정함으로서 해당 부위로만 잡을 수 있게 한다. 또한 여기에서 Attach Transform도 설정하여 자연스럽게 물건을 잡는 방식을 취할 수 있다.

또한 Secondary Attach Transform도 있는데, 이건 한 오브젝트에서 잡을 수 있는 부분을 하나 더 설정하는 것이다.(가까운 거리)

물체에서 오브젝트를 한 부위 이상으로 잡을 시 Multiple로 잡을 수 있는 부분을 설정할 수 있다.
이를 이용해 예시 상황으로 양 손으로 잡는 소총 같은 것을 구현할 수 있다.

  • Movement Type

Instantaneous, Kinematic, Velocity Tracking이 있다.

  • Instantaneous : 물체를 잡고 있는 동안 Rigidbody가 작용하지 않는다.
  • Kinematic : 유니티 내부적으로 정해진 움직임대로 움직인다. Instataneous보다 부드럽게 움직이나 마찬가지로 Rigidbody가 작용하지 않는다.
  • Velocity Tracking : 물체를 움직이는 동안 물리력이 작용한다.
  • 물체를 놓았을 때 던지는 기능

  • XR General Grab Transformer

해당 컴포넌트를 통해 잡는 방법에 대한 정의를 할 수 있다.

3. Socket Interactable

특정 물체를 알맞은 위치에 넣는 Interactable이다.

이와 같이 총의 탄창을 자식 오브젝트로 두고, Socket Interactable을 달아서 총의 탄창을 끼우는 방식을 구현할 수 있다.

* 총을 Force Grab로 가져오는 것이 조금 더 자연스러운 모션이 될 수 있다.

또한 아무 물체나 끼우면 안 되므로, Hover Interactor Event에서 끼울 수 있는 물체를 판단해준다.
이후 끼울 수 있는 물체면 Select로 넘어간다.

4. Hand Tracking

VR로 사람의 손을 트래킹하여 컨트롤러 없이 사람의 손 모션으로 VR 조작을 가능하게 하는 기능이다.
이 기능은 기본적으로 Meta Quest 2 기준 헤드셋 중앙의 카메라의 인식에 따라 손을 인식하기 때문에, 해당 부분을 가리지 않도록 한다.

Hand Tracking의 경우 생각보다 오류가 많이 생기고 밝은 곳에서 사용하지 않으면 인식을 잘 못하는 경향이 있다.

이와 같은 방식으로 각각의 손가락이 어떤 움직임을 가지고 있는지 판단하여 제스쳐를 판단한다.

손의 생김새를 새로 등록하는 방식으로 커스텀이 가능하고, 손의 모션도 커스텀해서 만들 수 있기는 하다.
그런 것이 필요한 경우 직접 만들고, 아니면 기본적으로 제공되는 것을 사용하는 게 좋을 수 있다.

이러한 손 모션을 통해 특정 이벤트를 발생시키거나 인식에 이용된다.

profile
게임 만들러 코딩 공부중

0개의 댓글