[Unity]11.HTC Vive 사용 #4 - VR Chat(캐릭터 생성)
- 게임 개발 - Unity3d
- 2019. 1. 16. 22:14
안녕하세요 유랑입니다.
오늘부터는 HTC Vive와 캐릭터를 연동해서 VRChat을 만들어 보도록 하겠습니다.
우선 네트워크는 포톤을 사용할 예정입니다.
1. 캐릭터 생성
1-1) 준비작업 - ㉠프로젝트 세팅
프로젝트 이름과 위치를 지정한 후 생성해 주겠습니다.
HTCVive를 사용하기 위해서는 XR Settings에서
Virtual Reality Supported를 체크 후 OpenVR로 설정해 주세요!!!
1-2) 준비작업 - ㉡SteamVR
HTC Vive를 사용하기 전 에셋 스토어에서 SteamVR Plugin을 다운 받겠습니다.
해당 에셋은 VR개발에 편리한 프리팹과 씬을 제공합니다.
1-3) 준비작업 - ㉢Photon Pun2
포톤은 접근하기 쉬운 네트워크 엔진입니다.
에셋 스토에에서 PUN2를 다운받고 포톤 홈페이지에서 ID를 복사하여 붙여주세요.
https://www.photonengine.com/ko-KR/Photon
1-4) 준비작업 - ㉣에셋
그밖에도 캐릭터에 쓰일 머리와 손 그리고 맵이 필요할텐데,
손은 SteamVR 프리팹으로 대체하겠습니다.
맵을 다운받았으면 제공하는 씬을 실행시켜서 정리해 주세요.
카메라는 VR 프리팹에서 제공해 주기 때문에 삭제해 주겠습니다.
1-5) 플레이어 만들기 - ㉠CameraRig
CameraRig는 헤드셋과 컨트롤러를 동기화 시켜주는 프리팹입니다.
게임을 실행하면 헤드 트래킹이 되며 컨트롤러가 동기화 되는걸 확인할 수 있습니다.
SteamVR에는 모든 VR카메라의 렌더링을 처리하는 Steam VR_Render 요소가 포함되어 있습니다.
CameraRig만 있어도 자동으로 해당 오브젝트를 인스턴스화 시켜줍니다.
CameraRig에서 해당 오브젝트는 Camera(머리), Controller(왼손, 오른손)에 해당합니다.
Model은 컨트롤러의 이미지를 보여주는데 손으로 대체할 것이기에 비활성화와 언체크를 해주겠습니다.
말머리와 글로브 프리팹을 각각 컨트롤러와 카메라 자식으로 넣어주세요.
크기와 위치를 조정하는 작업입니다.
1-6) 플레이어 만들기 - ㉡PUNObject
SteamVR을 사용하실 때 까다로운 점이 있습니다.
SteamVR에서 제공해 주는 스크립트에서 내 컨트롤러가 아니더라도 같이 제어가 되는 것이죠.
이 부분 때문에 CameraRig는 네트워크화 하지 않고,
빈 오브젝트를 네트워크화 시켜서 추후 CameraRig 자식으로 설정해 줄것입니다.
컨트롤러 자식으로 두면 같이 움직일테고 네트워크 공유도 가능하답니다.
빈오브젝트를 다음과 같이 구성해 주세요.
Photon View는 네트워크 데이터를 공유하고,
Photon Transform View는 트랜스폼 데이터를 네트워크화 시켜 제공해 줍니다.
인스펙터창을 두 개로 놓고 다음과 같이 적용해 줍니다.
- PUNObject => PhotonView 스크립트 생성(Head, LeftHand, RightHand에 있는 트랜스폼 뷰 적용)
- Head => PhtonTransform View 스크립트 생성
- LeftHand=> PhtonTransform View 스크립트 생성
- RightHand=> PhtonTransform View 스크립트 생성
1-7) 플레이어 만들기 - ㉢프리팹
오브젝트들을 프리팹으로 만들기 전에 글러브에 있는 Steam VR_Behaviour 스크립트를 삭제해 주세요.
삭제하지않으면 스켈레톤 액션 때문에 큰일이 일어납니다.(게임 실행하시면 아십니다.)
CameraRig는 이름을 Player로 변경한 뒤 프리팹 폴더로,
PUNObject는 Resources 폴더로 옮겨서 프리팹으로 만들어 주세요.
네트워크로 인스턴스 시킬 프리팹들은 Resources 폴더에서만 가능하답니다.
1-8) 플레이어 만들기 - ㉣스크립트 작성
PhotonInit이라는 스크립트를 생성해 주겠습니다.
기존에 포톤을 하신 분들이라면 내용이 크게 어려운 건 없습니다.
방을 만들고 캐릭터를 생성해 주는 부분인데,
인스턴스 과정과 오브젝트 위치 변경이 조금 헤깔리실 수 있습니다.
- Player 프리팹은 인스턴스화
- PUNObject는 네트워크 인스턴스화
- Head는 Player 오브젝트의 Camera 자식으로 설정
- LeftHand는 Player 오브젝트의 Controller(left)로 설정
- RightHand는 Player 오브젝트의 Controller(right)로 설정
마지막으로 빈 오브젝트를 생성한 뒤 PhotonInit으로 이름을 변경,
그리고 PhotonInit 스크립트 추가 후 프리팹을 적용해 주세요.
게임을 실행시키면 두 캐릭터의 머리와 손이 네트워크로 공유되는걸 확인할 수 있습니다^^
2. 마무리
오늘 강의는 여기까지입니다.
VRChat에 필요한 캐릭터를 만드는 과정에 대해서 진행하였습니다.
다음 시간에는 VRIK를 이용해 유니티짱 캐릭터를 네트워크 동기화 시켜보겠습니다.
오늘도 고생하셨습니다.
감사합니다.
수업자료: https://github.com/YouRang12/-Tistory-Unity---Extra-VR-