- 이 실습은 Meta XR Project Setting 이 선행 되어야 합니다.
버튼 인터랙션 실습

- poke example scene을 열기
- Interactables > BigRedButton > Button 선택
- Inpector 창에서 interatable Unity Event Wrapper 찾기
선택할 수 있는 인터랙션
Interactable Unity Event Wrapper는 XR Interaction Toolkit에서 제공하는 컴포넌트로,- 사용자가 XR 환경에서 오브젝트(버튼 등)와 상호작용할 때 발생하는 이벤트들을 UnityEvent 형태로 노출한다.
| 이벤트 이름 | 발생 시점 | 설명 |
|---|---|---|
| When Hover() | 인터랙터(손, 컨트롤러, 포인터 등)가 오브젝트 위에 올라왔을 때 | 마우스 오버처럼, 사용자가 오브젝트를 ‘가리키기 시작할 때’ 호출된다. |
| When Unhover() | 인터랙터가 오브젝트 위에서 벗어날 때 | Hover 상태가 해제될 때 (가리키던 손이나 레이가 떠날 때). |
| When Select() | 오브젝트를 실제로 ‘선택’했을 때 | 버튼을 누르거나 트리거를 당기는 등, 클릭/그랩 동작 시 발생한다. |
| When Unselect() | 선택 상태를 해제했을 때 | 버튼에서 손을 떼거나, 그랩을 놓을 때 발생한다. |
| When Interactor View Added() | 새로운 인터랙터가 감지되었을 때 | 새로운 손, 레이캐스트 등 상호작용 가능한 대상이 인식될 때 호출된다. |
| When Interactor View Removed() | 감지되던 인터랙터가 사라졌을 때 | 손이 트래킹에서 벗어나거나 레이가 끊길 때 발생한다. |
| When Selecting Interactor View Added() | 선택을 시도하는 인터랙터가 추가될 때 | 오브젝트를 선택하려는 인터랙터가 진입할 때 호출된다. |
| When Selecting Interactor View Removed() | 선택 중이던 인터랙터가 빠져나갈 때 | 선택을 시도하던 인터랙터가 중단되거나 사라질 때 발생한다. |
1. Interactor란?
XR Interaction Toolkit에서 Interactor는 “사용자의 상호작용 행위 주체”를 의미한다.
- 예시:
- 손으로 누를 때 → Poke Interactor
- 컨트롤러로 집을 때 → Direct Interactor
- 멀리서 레이로 가리킬 때 → Ray Interactor
- 눈동자/시선으로 조준할 때 → Gaze Interactor
void OnInteractorViewAdded(InteractorView view)
{
var interactor = view.Interactor; // 실제 인터랙터 객체
if (interactor is XRRayInteractor)
Debug.Log("Ray Interactor 감지됨");
else if (interactor is XRPokeInteractor)
Debug.Log("Poke Interactor 감지됨");
else if (interactor is XRGazeInteractor)
Debug.Log("Gaze Interactor 감지됨");
}
요약
- Hover / Unhover → 포인팅(가리킴)
- Select / Unselect → 실제 클릭 또는 잡기(그랩)
- Interactor View Added/Removed → 트래킹되는 인터랙터 감지 변화
- Selecting Interactor View Added/Removed → 선택 상태 변화
스크립트 생성하기
- 기존 Gemini 제미나이 실습2을 통해 만들어진 소스코드를 그대로 사용하여 다른 이벤트에 연결해 봅시다.
새 스크립트 colorChanger.cs파일 생성해줘. material color를 빨강,파랑,초록 순서대로 반복되게 변경하는 public 함수 colorRotation 포함

- poke example scene에서 cube 생성

- cube에 colorChanger.cs를 드래그 드랍하여 적용 (이번엔 clickEventHandler.cs는 사용하지 않습니다.)

- button의 When Select의 추가(+) 버튼을 눌러 대상을 추가
- Object 란에 cube을 드래드 드랍하여 연결
- function 부분에서 colorChanger.colorRotation을 선택
- 결과적으로 ‘버튼을 누르(When Select)면 컬러바꾸기(colorRotation)’ 기능이 동작하도록 됨.

- 스와이프 객체를 왼손으로 스와이프(When active) 하면

- DistanceGrab 객체를 멀리서 잡으면(When select)
- HandGrab 객체를 직접 잡으면(When select)

- 스프레이를 분사하면(When spray)
- 스프레이를 직사하면(When stream)

- 왼손으로 엄지척을 하면(When select)

- Interactable Event Wrapper가 없는 경우는 Interactable이 있는 위치에서
- Add Component > 검색하여 추가

- Interactable을 드래그 하여 Interactable Event Wrapper에 연결
