공부/Unity

[Unity] XR Toolkit Interaction

굴러다니다니 2025. 6. 27. 15:49

urp 3d로 프로젝트 만들기

asset에 있는 package인지 뭔지 삭제

package manager에서 XR interaction toolkit 설치

얘도 받기 + oculus 체크

package manager > XR Interaction Toolkit에서

Starter Assets, XR Device Simulator sample import하기

demo scene의 모습

만약 지금 실행하고 싶으면 VR 연동해서 해야됨

XR device simulator sample 받은거 프리팹 넣어주면 pc에서도 가능

vr 연결해서 할거면 저 프리팹 active false 해줘야됨

조작은 보면서 해보자,, 꽤나 다루기 어렵

Sample Scene으로 돌아와서 XR Origin 만들어주자

 

Preset 설치: 컴포넌트, 인스펙터 속성, 임포터 설정 등의 '기본값'을 저장하고 불러오는 파일

저기 가면 presets 있는데 선택하면 우측 위에 add 어쩌구 있따

이렇게 5개 add하자

add하면 여기에서 확인 가능

Right / Left 구분해주자

left controller 들어와서

?랑 점3개 사이에 볼륨 같은 버튼 누르기

left controller는 left, right은 right 연결해주자

plane 생성 후 xr origin 위치 조정

PC 실행을 위해 아까 얘 끌어오기

대충 controller처럼 만들어서 model이라고 해줬다

left controller / right controller의 자식으로 model을 넣어서 볼 수도 있지만

저 손 prefab으로 만들고 left controller / right controller의 model prefab에 넣어줘도 된다

 

interact 시도하는 손: XR Interactor 컴포넌트 필요

손에 잡히는 물체: XR Interaction 컴포넌트 필요

controller 수동으로 만들어보기위해

camera offset의 자식으로 XR > Direct Interactor 두개 생성해서 이름 정해주기

+ 얘네도 왼쪽 오른쪽 맞춰서 Add Preset해주기

Hover / Select 이런거 enter 어쩌구도 고를 수 있음

아까처럼 prefab에 model 연결 얘네도 해주자

손에 잡힐 Cube > GrabObject로 만듦

위치는 카메라랑 가깝게 (0, 2, -8)

XR Grab Interactable 추가

GrabObject is kinematic (RB) 켜주기

 

손잡이가 cube에 닿을정도로 앞으로 가고 T > G는 꾹 누르고있으면 큐브가 없어지는데

씬 뷰에서 보면 손잡이 뒤쪽으로 Cube가 잡혀요이

left / right controller에서 Select Action Trigger State Change로 되어있는데

얘를 Sticky로 바꾸면

G를 꾹 누르지 않아도 한번만 누르면 붙어있어요

이 셋에 EventTest 함수 넣어주기

using UnityEngine;

public class EventTest : MonoBehaviour
{
    public void OnFirstHoverEntered()
    {
        Debug.Log($"{gameObject.name} - OnFirstHoverEntered");
    }

    public void OnLastHoverExited()
    {
        Debug.Log($"{gameObject.name} - OnLastHoverExited");
    }

    public void OnHoverEntered()
    {
        Debug.Log($"{gameObject.name} - OnHoverEntered");
    }

    public void OnHoverExited()
    {
        Debug.Log($"{gameObject.name} - OnHoverExited");
    }

    public void OnFirstSelectEntered()
    {
        Debug.Log($"{gameObject.name} - OnFirstSelectEntered");
    }

    public void OnLastSelectExited()
    {
        Debug.Log($"{gameObject.name} - OnLastSelectExited");
    }

    public void OnSelectEntered()
    {
        Debug.Log($"{gameObject.name} - OnSelectEntered");
    }

    public void OnSelectExited()
    {
        Debug.Log($"{gameObject.name} - OnSelectExited");
    }

    public void OnActivated()
    {
        Debug.Log($"{gameObject.name} - OnActivated");
    }

    public void OnDeactivated()
    {
        Debug.Log($"{gameObject.name} - OnDeactivated");
    }
}

3 오브젝트 다 Interactable Events 부분에 본인 오브젝트 넣고 이름 똑같은 Event Test 함수 넣어준다.

(Focus는 없음)

 

*right controller는 기존꺼 사용

728x90
반응형