자료실

[Photon 튜토리얼]PUN으로 VR 만들기
작성자 | admin 작성일 | 2018-11-19 조회수 | 84

VR(가상현실)이란?


컴퓨터 등을 사용한 인공기술로 만들어낸 실제와 유사하지만 실제가 아닌 어떤 특정한 환경이나 상황 혹은 그 기술자체를 의미합니다.



사실상 최초의 현실적인 게이머용 VR 헤드셋 영상을 한번 보세요!
https://www.youtube.com/watch?v=l9o8MJKsU_0



구글 카드 보드란
2014년 구글 I/O 컨퍼런스에서 발표된 DIY 도면 및 해당 도면으로 만들어진 HMD(Head Mounted Display)를 지칭합니다.
* HMD : 주로 가상현실 또는 증강현실의 구현을 위한 디스플레이 장치

* 공식 홈페이지 https://vr.google.com/cardboard/index.html


이제 서론은 접고, 개발을 시작해보겠습니다.

요약
1. SDK 준비 (구글 카드보드, PUN)
2. 유니티 (포스팅시 적용 버전 2018.1.8f1)
VR 개발툴 선두주자라고 할 수 있는 유니티는 다 설치해놓으셨죠?


그 다음,구글 카드보드 SDK for Unity 를 다운 받겠습니다.
유니티 어셋스토어에서 받는게 아니라 깃허브에서 다운받으면 됩니다.

https://github.com/googlevr/gvr-unity-sdk/releases
(포스팅시 적용 버전 1.150.0)


* 참고
(혹시나 예전버전 SDK가 필요하시면)
https://github.com/googlevr/gvr-unity-sdk/releases/tag/v1.110.0



유니티 공식 샘플 소스로 VR 테스트를 해보겠습니다.

Roll A Ball 프로젝트입니다.




튜토리얼 사이트
https://unity3d.com/kr/learn/tutorials/s/roll-ball-tutorial


VR이 아닌 앱으로 실행을 하면



이제 VR 프로젝트로 변환시켜보겠습니다!
구글 카드보드 SDK의 카메라 말고 Dive Camera를 한번 사용해보겠습니다.

https://www.durovis.com/en/sdk.html




홈페이지에서 유니티 플러그인 패키지를 다운받으세요.
그리고 프로젝트에 임포트를 하세요.


Asset _Completed-Game Roll-a-ball 씬을 엽니다. 그리고 임포트한 Dive Camera 를 하이라키에 넣겠습니다. Asset Dive Prefabs Dive_Camera 프리팹을 하이라키에 드래그앤 드랍하세요.
기존에 하이라키에 있던 MainCamera는 비활성화시켜주세요.
그러면 이런 하이라키를 구성할 겁니다.



이제 VR 프로젝트가 완성되었습니다. 빌드앤 런을 해보세요




VR로 잘 실행되었다면 이제 멀티플레이어가 되도록 만들어보겠습니다.
멀티플레이어 게임을 만들기 위해서 포톤 어셋부터 임포트 하겠습니다.
PUN을 유니티에 적용하는 부분은 포톤코리아 블로그에서 포스팅한 글('포톤엔진을 유니티에 적용')을 참고해주세요~
http://photonkr.tistory.com/13?category=1000133


위 포스팅을 잘 따라하시면 유니티에 PUN 임포트&설정은 문제 없을 것입니다.
그 다음 빈 오브젝트를 생성한 후 이름을 'NetworkController'로 변경합니다. 곧 이 오브젝트에 곧 생성할 NetworkController.cs 파일을 컴포넌트로 넣을 것입니다.

이제 플레이어가 될 오브젝트를 프리팹(Prefab)으로 만들겠습니다.
Asset 폴더 아래에 Resources 폴더를 하나 생성합니다. 이 폴더로 Player 게임오브젝트를 드래그앤 드랍하세요.


프리팹을 만들었으니 하이라키에 있는 Player 오브젝트는 삭제하거나 비활성화 시켜주세요.
프로젝트 하이라키는 아래와 같습니다.

Main Camera와 Player는 비활성화)

이제는 스크립트 파일을 만들겠습니다.





* PhotonNetwork.ConnectUsingSettings()

* PhotonNetwork.Instantiate()
- 네트워크 객체를 자동으로 생성
- 프리팹 이름, 시작위치, 회정정보
- 프리팹은 Resources 폴더 안에 존재, 프리팹은 PhotonView 가 컴포넌트로 존재





* OnPhotonSerializeView()
- steam 변수를 통해 read, write

**steam.isWriting

**steam.SendNext()
- 데이터 직렬화
- 다른 유저에게 데이터를 보냄




아까 말씀해드린대로, NetworkController.cs 파일은 NetworkController 게임오브젝트에 컴포넌트로 추가해주세요.

NetworkedPlayer.cs 파일은 프리팹에 컴포넌트로 넣어주세요.
그리고 포톤 엔진이 제어할 수 있도록 PhotonView 도 컴포넌트로 넣어주세요.

PhotonView를 넣은 후, Observed Components에는 NetworkedPlayer 컴포넌트를 드래그앤 드랍해주세요.

아래 사진은 Player 프리팹 수정한 인스팩터 부분입니다.

빌드 앤 런 해보세요!




★Photon 공식 홈페이지


https://www.photonengine.com/ko-kr/Photon

★Photon Help Center


https://support.photonengine.jp/hc/ko