[VR Unity]

SIYEON·2024년 11월 5일

내가 까먹을 때 보려고 적는 Unity VR 개발 시 컴포넌트 세부사항들..

1. XR Origin 설정

1) XR Origin - Tracking Origin Mode

: XR 기기의 좌표계나 기준점 설정 모드

  • Device
    : XR 기기 장착 위치 자체를 기준으로 설정, 사용자가 처음 장비를 착용한 위치
    -> 앉거나 고정된 위치에서 이용할 때 사용
  • Floor
    : 사용자 발밑의 바닥을 기준으로 좌표계 설정
    -> 룸스케일, 이동하면서 이용할 때 사용

2) XR Origin - Controller - XR Controller(Component)

: Controller 입력 처리, 상호작용 이벤트 트리거

  • Select Action
    : 물체 선택 시 사용하는 입력
    -> 트리거 버튼, 그립 버튼을 눌러 객체를 선택하거나 잡는 경우 사용
  • Activate Action
    : 선택한 객체를 활성화 시킬 때 사용되는 입력
    -> 트리거 버튼을 사용하여 물체와 상호작용할 때 사용
  • UIPress Action
    : UI 상호작용 입력
  • Haptic Feedback
    : 컨트롤러 진동 피드백 설정

2. Object 배치

1) 배치에 유용한 단축키

  • Grid Snap
    : Ctrl 키 누른 상태에서 오브젝트 이동
    -> 격자에 맞춰 이동 가능
  • Vertex Snapping
    : V 키 누른 상태에서 오브젝트 이동
    -> Vertex 배치에 유용

2) Light

  • Window -> Rendering 에서 빛 조절 및 커스텀 가능

3. Object Grab and Throw

1) XR Grab Interactable

  • Use Dynamic Attach
    -> 사용자의 손 위치에 맞춰 오브젝트의 Grab 위치를 동적으로 조정할 수 있도록 하는 기능
  • Movement Type
    -> Instantaneous : 즉시 이동, 지연이 거의 없지만 부자연스러운 움직임으로 보일 수 있고, 물리적 충돌 효과가 제한된다.
    -> Kinematic : 손의 움직에 맞춰 자연스럽게 따라오는 움직임, 물리 오브젝트와 상호작용이 제한된다.
    -> Velocity Tracking : 물리적으로 자연스러운 움직임, 역동적인 상호작용에 적합하다. 하지만 지연이 있을 수 있어 제어가 어렵다.

2) Project Settings

  • Fixed Timestep
    : 물리 계산이 이루어지는 주기를 결정하는 옵션, 초 단위, 기본값 : 0.02초
    -> 값이 작을 수록 더 정확하고, 자주 물리 연산을 수행한다.
  • Default Solver Iterations
    : 충돌 처리와 제약 조건의 정확도를 조정하는 옵션, 충돌과 관절 같은 제약 조건을 해결할 때 반복하는 횟수를 결정한다. 기본값 : 6
    -> 빠른 속도로 움직이거나 여러 오브젝트가 복잡하게 충돌할 때 Solver Iterations을 높이면 올바르게 계산되고, 서로 겹치지 않는다.
  • Solver Type
    : 물리 연산의 안정성과 정확도를 조절하는 옵션
    -> TGS : 높은 정확도와 복잡한 물리 상호작용이 포함된 게임 추천
    -> PGS : 성능이 중요하여 물리적 정확도가 크게 중요하지 않은 게임 추천

3. Object Grab and Throw CODE

1) TriggerZone

public class TriggerZone : MonoBehaviour
{
    public string targetTag;
    public UnityEvent<GameObject> OnEnterEvent;

    private void OnTriggerEnter(Collider other)
    {
        if(other.gameObject.tag == targetTag)
        {
            OnEnterEvent.Invoke(other.gameObject);
        }
    }
}

2) Tresh

public class TreshCan : MonoBehaviour
{
    
    private void Start()
    {
        GetComponent<TriggerZone>().OnEnterEvent.AddListener(InsideTrash);
    }

    public void InsideTrash(GameObject go)
    {
        go.SetActive(false);
    }

   
}

3) DisableGrabbingHandModel

public class DisableGrabbingHandModel : MonoBehaviour
{

    public GameObject leftHandModel;
    public GameObject rightHandModel;

    // Start is called before the first frame update
    void Start()
    {
        XRGrabInteractable grabInteractable = GetComponent<XRGrabInteractable>();
        grabInteractable.selectEntered.AddListener(HideGrabbingHand);
        grabInteractable.selectExited.AddListener(ShowGrabbingHand);
    }

    public void HideGrabbingHand(SelectEnterEventArgs args)
    {
        if(args.interactorObject.transform.tag == "Left Hand")
        {
            leftHandModel.SetActive(false);
        }
        else if(args.interactorObject.transform.tag == "Right Hand")
        {
            rightHandModel.SetActive(false);
        }
    }

    public void ShowGrabbingHand(SelectExitEventArgs args)
    {
        if(args.interactorObject.transform.tag == "Left Hand")
        {
            leftHandModel.SetActive(true);
        }
        else if(args.interactorObject.transform.tag == "Right Hand")
        {
            rightHandModel.SetActive(true);
        }
    }

}

4. Continuous Movement and Teleportation

1) Locomotion System

: 이동을 할 수 있도록 돕는 기능

  • Teleportation
    : 특정 지점 선택 후 순간적인 이동
    : Teleportation Area 또는 Teleportation Anchor로 텔레포트 영역 지정

  • Continuous Movement
    : 사용자가 조이스틱을 이용해 시점을 회전
    : Snap Turn -> 특정 각도로 빠르게 회전
    : Continuous Turn -> 부드럽게 회전 (연속적)

  • Teleportation Provider
    : 텔레포트 구현을 위한 제공자 역할
    : 텔레포트 요청 처리 및 사용자 위치 업데이트

  • Safety 및 Comfort
    : 속도 제한 및 헤드 고정 기능 제공

2) Dynamic Move Provider

  • 주요 프로퍼티
    1) Move Speed : 캐릭터 이동 속도 조절
    2) Forward Source : 이동 방향의 기준이 되는 Transform 지정 -> Headset, Controller
    3) Input Action : 이동을 제어하는 입력 값 설정
    4) Gravity Application : 중력 효과 설정

3) Character Controller

  • 주요 프로퍼티
    1) Slope Limit : 캐릭터가 오를 수 있는 최대 경사각
    2) Step Offset : 단차를 넘을 수 있는 높이
    3) Skin Width : 캐릭터와 다른 충돌체 간의 간격
    4) Min Move Distance : 최소 이동 거리
    5) Center : 캐릭터 컨트롤러의 중심 위치 (캐릭터의 발 위치로 설정)
    6) Radius : 캐릭터의 반지름, 캐릭터가 충돌하는 범위
    7) Height : 캐릭터의 높이

4) Character Controller Driver

5) Turn

  • Continuous Turn Provider(Action-based)
  • Snap Turn Provider(Action-based)

5. Socket Interactor and Button,Door

1) Socket Interactor

: 객체를 소켓에 넣거나 끼우는 동작을 구현할 때 사용한다.
: 퍼즐, 도구 조립, 물체 고정 같은 상호작용에 필요하다.

  • 주요 기능
    1) 객체 잡기 및 고정
    2) 조건부 수용 : 특정 객체만 Soket에 들어갈 수 있도록 제한 가능

2) Custom Socket Interactor

: 특정 태그를 가진 객체만 상호작용 가능하도록 커스텀 소켓 인터랙터 구현
: CanHover -> 객체가 소켓 위에 호버할 수 있는지 결정하는 메소드
: CanSelect -> 객체를 소켓에 삽입할 수 있는지 결정하는 메소드

profile
Unity

0개의 댓글