Unity 3D에서 SteamVR을 사용하여 가상현실 콘텐츠를 구현하기 위해서는 SteamVR에 제공되는 플러그인을 활용하여 가상 오브젝트를 제어할 수 있는 콘텐츠를 구현할 수 있습니다.
준비
AssetsStore - SteamVR Plugin
Throwable.cs
- Steam VR Throwable.cs는 가상환경에서 던질 수 있는 객체를 구현할 때 사용됩니다.
역할 :
1. 컨트롤러 입력 처리 : 사용자의 컨트롤러 입력을 감지하고 물리 로직을 적용시켜 던지거나 잡는 동작을 활성화 할 수 있습니다.
2. 객체 움직임 제어 : 상호작용 가능한 객체를 던지기 시작하면 이 스크립트는 객체의 움직임을 제어합니다. 또한 컨트롤러의 동작의 속도, 방향 및 힘을 계산하여 객체를 움직입니다.
3. 충돌 감지 : 던졌던 객체의 충돌처리를 담당합니다. 객체가 충돌했을때, 그 이후의 상태를 체크해 이벤트 처리를 할 수 있습니다.
Inspector )
Attachment Flags
객체를 잡을 때 설정할 수 있는 플레그 값 설정
1) SnapOnAttach : 객체는 손의 지정된 위치점에 잡힌다. (Attachment Offset 지정)
2) DetachOthers : 부착된 상태에서 다른 객체를 잡았을 때 이전 객체는 분리된다.
3) DetachFromHand : 다른 손으로 객체를 잡게 되면 객체는 분리된다.
4) ParentToHand : 객체를 잡게되면 객체는 부모에 종속된다.
5) VelocityMovement : 객체는 손의 위치와 회전에 일치하게 이동
6) TurnOnKinematic : 객체는 다른 외부의 물리힘에 반응하지 않는다. (중력 X)
7) TurnOffGravity : 객체는 다른 외부의 물리힘에 반응하지 않는다. (중력 포함)
8) AllowSidegrade : 객체를 잡을 때 사용자 입력값을 전환할 수 있다.
Release Velocity Style, Release Velocity Time Offset
물체를 던진 후에 속도를 어떻게 유지할 것인지 결정 (물체의 자연스러움을 결정)
1) GetFromHand : 던진 물체의 속도를 사용자의 손(컨트롤러)에서 가져온다. (손의 움직임에 따라 속도가 결정)
2) ShortEstimation : 물체를 던진 후 물체의 속도를 빠르게 추정하여 설정 (빠른 반응속도와 움직임을 필요로 할 때 사용한다.)
3) AdvancedEstimation : ShortEstimation보다 더 정교한 속도 추청 알고리즘을 사용한다. 복잡한 계산을 통해 더 정확하고 현실적인 움직임을 생성한다. (더 자연스러운 물체의 움직임을 구현할 때 유용)
Restore Original Parent
보통 물체를 던지면 던진 위치에서 독립적으로 움직이게 된다. 하지만 던진 후에 부모의 객체로 복원되는 것이 필요할 때가 있다. 그럴 때 활성화를 해서 원래 부모 객체로 돌아가게 하는 옵션
OnPickUp Event
물체를 손이 처음으로 집었을 때 발생
OnDetachFromHand
물체를 잡고 놨을 때 발생
OnHeldUpdate
물체를 잡고 있는 동안 매 프레임마다 반복 호출
주의사항
> AllowSidegrade : 설정 시 입력값 전환으로 편하게 잡을 수 있지만 정의되어있지 않다면 실수로 떨어질 가능성이 높다.
> 양손을 사용하여 객체를 잡을 때는 DetachOthers, DetachFromHand는 비활성화를 해줘야 작동 가능하다.
> OnPickUp Event에서 호출했던 함수는 OnHeldUpdate에서 중복해서 체크할 필요는 없다.
사용방법
GameObject throwableObject = throwable.GetThrowableObject();
잡고 있는 객체를 판단해 OnPickUp(), OnDetachFromHand(), OnHeldUpdate() 메서드를 사용해 이벤트 처리를 해주면 된다.