자료실

[PUN2 실전](연습용)멀티플레이 레이싱 게임 만들기 2/2
작성자 | admin 작성일 | 2019-11-18 조회수 | 260
앞선 글에서 레이싱 게임에 필요한 재료(자동차 모델링, 트랙 등), 타이머 등을 알아보았습니다.
일종 싱글 게임 기반을 알려드렸습니다.

다음 URL을 통해 확인할 수 있습니다.
https://photonkr.tistory.com/43


이제 Photon Server를 이용해 멀티 게임도 되게끔 만들어 보겠습니다.

PUN2를 게임 프로젝트에 다운로드 & 임포트합니다.
https://assetstore.unity.com/packages/tools/network/pun-2-free-119922




Photon App ID 가 없다면 홈페이지에서 생성해야 합니다.
Photon 홈페이지 회원가입을 하시고,새 어플리케이션을 만드시면 됩니다.

예를 들어,


Photon 홈페이지에서 위 화면과 같이 어플리케이션 ID를 얻을 수 있습니다.


생성한 Photon App ID를 유니티 프로젝트에 설정해보겠습니다.
유니티 프로젝트에 PUN2를 임포트 성공시 나오는 팝업에 바로 입력하셔도 됩니다.
만약 그 팝업을 놓치셨다면 AssetsPhotonPhotonUnityNetworkingResources
폴더에 PhotonServerSettings 를 찾으시면 됩니다.



혹시 PUN2 시작하는데 정보가 더 필요하시면 아래 포스팅을 참고해주세요.
https://photonkr.tistory.com/39?category=1030095



싱글 게임과 멀티 게임을 구분하여 들어가도록 하겠습니다.
이번 포스팅은 멀티 게임을 만드는데 주 목적이므로 멀티로 입장하게끔 만드셔도 됩니다.
Canvas에 'Single', 'Multi' 버튼을 각각 생성합니다.

예를 들어,
* 입장(로비)



멀티 게임을 위해 Photon API를 사용하기 위해서는 부모 클래스를 변경해야합니다.
즉, MonoBehaviour -> MonoBehaviourPunCallbacks

예를 들어,


Lobby 컨트롤러를 생성하여 PhotonNetwork를 이용해 게임 버전과 세팅을 합니다.

예를 들어,



API
* ConnectUsingSettings
https://doc-api.photonengine.com/en/pun/v2/class_photon_1_1_pun_1_1_photon_network.html#afe79d7b335a4c0dd6d3ed4b3314c7c58

만약 싱글 버튼을 만드셨다면 싱글 버튼에 LoadScene 함수를 연결함으로써 싱글 게임 씬으로 이동하게 만드시면 됩니다.

예를 들어,



API
* SceneManagement.LoadScene
https://docs.unity3d.com/ScriptReference/SceneManagement.SceneManager.LoadScene.html


참고로 네임스페이스를 이용하셔도 되고 안하셔도 됩니다.
안하시면 using 지시문을 통해 SceneManagement를 추가하세요.

예를 들어,



게임 오브젝트를 네트워크 상에서 구별해야함으로 자동차 게임오브젝트에 PhotonView 컴포넌트 추가하겠습니다.

예를 들어,


PhotonNetwork가 인스턴스화를 할 수 있도록자동차를 프리팹화 해야합니다.
게임 오브젝트를 Resouces 폴더에 둠으로써 프리팹화를 완성합니다.

예를 들어,



입장시 오브젝트 생성 (Instantiate) PhotonNetwork를 이용해

예를 들어,



룸 최대 인원도 제한을 해보겠습니다.
룸을 생성할 적에 RoomOptions을 이용하면 됩니다.
RoomOptions를 이용하려면 네임스페이스에 using 지시문을 통해 Realtime을 추가하는게 편합니다.

예를 들어,


그리고 방을 생성하기 전에 RoomOptions의 MaxPlayers를 설정하면 됩니다.

예를 들어,
https://doc-api.photonengine.com/en/pun/v2/class_photon_1_1_realtime_1_1_room_options.html



Photon에서 동기화를 하기때문에 소유권 체크를 통해 컨트롤을 제어하도록 만듭니다.

예를 들어,




API
* PhotonView.IsMine
https://doc-api.photonengine.com/en/pun/v2/class_photon_1_1_pun_1_1_photon_view.html#a67184424cffe2daae9001e06a6192d21



인스턴스화를 하면 카메라 연결을 새로 해주어야 합니다.
기존 샘플 프로젝트는 프리팹에서 새로 생성되는 오브젝트와 연결을 하는 것이 아닙니다.
카메라는 하이라키에 존재하는 게임 오브젝트와 연결되어있습니다.
그러나 우리는 인스턴스화를 해서 오브젝트를 생성함으로 카메라도 이에 맞게 연결시켜야 합니다.
그래야 카메라가 움직이는 자동차를 따라갑니다.

예를 들어,


Tag를 통해 찾아서 연결하였습니다.

Tag는 모든 오브젝트에 설정되어 있는 것은 아닙니다.

예를 들어,
https://www.photonengine.com/ko-kr/Photon

★Photon Help Center
https://support.photonengine.jp/hc/ko

★Photon Korea 공식 블로그
https://photonkr.tistory.com

★Photon Korea 페이스북
https://www.facebook.com/photoncloudkr

★Photon Korea 유튜브
https://bitly.kr/photonyoutube