킹머핀의 제작 일지
VR) 유니티 XR Interaction Toolkit 클래스 탐구 본문
- XRRig : MonoBehaviour 상속.
- LocomotionSystem : MonoBehaviour 상속.
- LocomotionProvider : abstract class. MonoBehaviour 상속.
- CharacterControllerDriver : MonoBehaviour 상속.
- ActionBasedContinuousMoveProvider : ContinuousMoveProviderBase 상속.
- ActionBasedContinuousTurnProvider : ContinuousTurnProviderBase 상속.
- ActionBasedSnapTurnProvider : SnapTurnProviderBase 상속.
- ContinuousMoveProviderBase : abstract class. LocomotionProvider 상속.
- ContinuousTurnProviderBase : abstract class. LocomotionProvider 상속.
- SnapTurnProviderBase : abstract class. LocomotionProvider 상속.
- TeleportationProvider : LocomotionProvider 상속.
클래스를 상속받아서 재정의할 수 있다면 유용할 것이다. 근데 난 할 줄 모른다! 하고 싶지도 않다. 일단 스크립트를 장착한 게임오브젝트를 그대로 가져와서 사용하는 방법으로 진행할 것이다.
상단 '게임 오브젝트 - XR' 메뉴에서 핵심 게임오브젝트를 생성하거나, XR Interaction Toolkit 샘플 씬을 살펴보면 어떤 스크립트를 어느 게임오브젝트에 붙여야 할지 알 수 있다.
- (GameObject) XRRig : XRRig, Character Controller(기본 컴포넌트)
- (Script) Locomotion System : LocomotionProvider 상속 스크립트와 함께 아무 게임오브젝트에. XRRig 게임오브젝트에도 가능.
간단히 정리하면, 한 오브젝트에 다 때려박을 수도 있지만, Locomotion System이나 Interaction Manager와 같은 위치에 구애받지 않는 스크립트는 Rig과 따로 생성된다.
XR Interaction Toolkit의 예제에는 네임스페이스가 UnityEngine.XR.Interaction.Toolkit.Examples인 스크립트가 두 개 있다.
- LocomotionSchemeManager : XRRigDemo 게임오브젝트에 부착됨
- LocomotionConfigurationMenu : Locomotion 설정을 조작하는 Locomotion Configuration Area - UI Canvas 게임오브젝트에 부착됨. Locomotion control schemes 및 구성 환경설정을 구성하는 데 사용할 동작을 저장하는 용도로 LocomotionSchemeManager을 이용함.
내가 필요한 기능이 이 두 스크립트에 있으니 참고하자. 일단 LocomotionconfigurationMenu는 LocomotionSchemeManager에서 정의한 Enum으로 목록을 표시하고 선택 시 LocomotionSchemeManager의 moveScheme과 turnStyle에 적용할 뿐이다. 그러니 핵심은 그 두 필드.
그렇게 적용한 설정을 SetMoveScheme()와 SetTurnStyle()에서 처리하는데, 코드가 의외로 겁나 간단하다 만세! 그냥 용도에 맞는 Provider 스크립트를 껐다 켰다할 뿐이다.
Binding masks, find control schame 등 Input action과 관련이 있어보이는(추정) 함수도 있지만 몰라, 무시한다. (클래스에 물음표 붙은 함수랑 인수는 뭐야? 아무튼 맘에 안 든다 ㅎㅎㅎ)
우선 ActionBased 스크립트 세 개는 단지 입력을 처리한다. ProviderBase 스크립트 세 개도 복잡하지 않았다. LocomotionProvider으로 상속받는 XRRig 스크립트의 함수에 입력한 값을 전달할 뿐이다.
- TeleportationProvider 핵심 코드 : xrRig.MoveCameraToWorldLocation(cameraDestination);
- SnapTurnProviderBased 핵심 코드 : xrRig.RotateAroundCameraUsingRigUp(m_CurrentTurnAmount);
- ContinuousTurnProviderBased 핵심 코드 : xrRig.RotateAroundCameraUsingRigUp(turnAmount);
- ContinuousMoveProviderBased 핵심 코드 : Character Controller을 사용중이면 m_CharacterController.Move(motion); 그렇지 않다면 xrRig.rig.transform.position += motion; EndLocomotion();
각 핵심 코드 다음에는 항상 EndLocomotion();이 있다.
이것들만 잘 활용하면 XRRig와 Locomotion 스크립트를 탐구하지 않아도(날로 먹고도) 새로운 기능을 만들 수 있지 않을까?
그 검증은 다음 글에서.
'Unity' 카테고리의 다른 글
VR) 유니티 XR Interaction Toolkit 계속 탐구 (0) | 2021.05.11 |
---|---|
VR) 유니티 XR Interaction Toolkit 응용 탐구 (0) | 2021.05.06 |
UNT) 커스텀 에디터 만들기 (0) | 2021.04.14 |
VR) 유니티 XR Interaction Toolkit 기본 탐구 (0) | 2021.04.05 |
VR) 유니티에서 오큘러스 Intergration 샘플 씬 탐구 (feat. MacOS' tears) (2) | 2021.04.02 |