본문 바로가기

Server

Photon Unity Networking PUN 튜토리얼 따라하기 1

원문 튜토리얼: doc.photonengine.com/ko-kr/pun/current/demos-and-tutorials/pun-basics-tutorial/lobby

 

그럼 시작

1. 로비 씬 생성

 1) 서버 접속, 룸 접근과 생성

 

  a. 새로운 씬을 만들자. 

 

을 누르고

Basic 씬을 Create 해 준 후  

 

세이브 기능을 이용해서 Launcher.unity로 저장해준다.

 

 b. 스크립트를 만들자. 

 

화면 하단 에셋 창에 커서를 두고 우클릭하면 위와같은 메뉴가 나온다. 거기서 C# Script 선택하면 

 

이렇게 새로운 스크립트가 생성된다. 이름을 Launcher로 변경해주자.

 

c. 게임 오브젝트를 만들자

 

Hierarchy 창에서 우클릭 후, Create Empty를 누르면 

위 처럼 객체가 생성된다. 이름을 Launcher로 변경해주자. 

 

d. 스크립트 할당해주기

 

Hierarchy 창에서 Launcer object를 클릭한 후, 인스펙터 창에서 AddComponent를 클릭한다.

그 다음 Launcher를 검색해서 스크립트 컴포넌트를 할당해준다. 

 

e. 스크립트 코딩하기

 에셋 창에 있는 Launcher script 파일(아래 참조)을 더블클릭하면 비쥬얼 스튜디오가 열린다.

원문에 있는 코드를 붙여주자. 

 

이런 식으로 붙여주었다. 그리고 저장해주자. 

 

 f. 스크립트 내용 분석

 

 - 네임스페이스는 타 모듈과의 충돌 방지를 위해서 설정했다.

 - MonoBehaviour 클래스를 상속해서 Awake와 Start 콜백을 이용한다.

 - Start 시 Connect가 진행됨

 

 g. 포톤 로그 기능 켜기

 

위 메뉴를 따라가서, 클릭해주면 인스펙터창이 다음처럼 나온다.

Errors Only를 Full로 변경해주자. 

 

h. 플레이 해주기

 

 

유니티 화면 중상단에 있는 플레이 버튼을 누른다.

 

그러면 콘솔창에 다음과 같은 메세지가 나온다.

 

기대하던 메세지가 아니다. 

 

다시 포톤 서버 세팅 메뉴로 가자.

서버 클라우드 세팅 탭을 열어주면, 네트워크 로깅 설정을 볼 수 있다. 이것도 ALL로 변경해주자. 

 

그리고 다시 빌드하면 

 

원문에서 알려준 '서버로부터 유저아이디 확보' 메세지까지 확인할 수 있다.

 

연결 실패 케이스에 대해서는 원문을 읽어보는 것으로 대신하겠다. 

 

2) PUN 콜백

 원문 참조

 

3) MonoBehaviorPunCallbacks 확장하기

 

  아까 편집해두었던 Launcher.cs 스크립트 파일을 수정해주자. 

 

 

   위와 같이 수정해주고, 

 

포톤 리얼타임도 넣어주고, 

원문의 코드도 추가해주었다. 

 

이후 일련의 수정을 통해 다음 코드가 들어갔다. 

#region MonoBehaviourPunCallbacks Callbacks


        public override void OnConnectedToMaster()
        {
            Debug.Log("PUN Basics Tutorial/Launcher: OnConnectedToMaster() was called by PUN");

            // #Critical: The first we try to do is to join a potential existing room. If there is, good, else, we'll be called back with OnJoinRandomFailed()
            PhotonNetwork.JoinRandomRoom();

        }

        public override void OnDisconnected(DisconnectCause cause)
        {
            Debug.LogWarningFormat("PUN Basics Tutorial/Launcher: OnDisconnected() was called by PUN with reason {0}", cause);
        }

        public override void OnJoinRandomFailed(short returnCode, string message)
        {
            Debug.Log("PUN Basics Tutorial/Launcher:OnJoinRandomFailed() was called by PUN. No random room available, so we create one.\nCalling: PhotonNetwork.CreateRoom");

            // #Critical: we failed to join a random room, maybe none exists or they are all full. No worries, we create a new room.
            PhotonNetwork.CreateRoom(null, new RoomOptions());
        }

        public override void OnJoinedRoom()
        {
            Debug.Log("PUN Basics Tutorial/Launcher: OnJoinedRoom() called by PUN. Now this client is in a room.");
        }


        #endregion

저장 후 돌려보자. 

로그가 잘 나오는걸 확인할 수 있다. 

 

h. 인스펙터에 변수 표출하기

 

#region Private Serializable Fields

        /// <summary>
        /// The maximum number of players per room. When a room is full, it can't be joined by new players, and so new room will be created.
        /// </summary>
        [Tooltip("The maximum number of players per room. When a room is full, it can't be joined by new players, and so new room will be created")]
        [SerializeField]
        private byte maxPlayersPerRoom = 4;

        #endregion

와 같이 Launcher.cs 스크립트를 수정해준다. (맨 처음 부분)

 

그 후 OnKOnJoinRandomFailed 함수를 다음과 같이 수정해준다. 

 

Debug.Log("PUN Basics Tutorial/Launcher:OnJoinRandomFailed() was called by PUN. No random room available, so we create one.\nCalling: PhotonNetwork.CreateRoom");

            // #Critical: we failed to join a random room, maybe none exists or they are all full. No worries, we create a new room.
            PhotonNetwork.CreateRoom(null, new RoomOptions { MaxPlayers = maxPlayersPerRoom });

이렇게 해주면, Launcher 객체 선택 후 보이는 인스펙터 창에서 최대 플레이어 수를 설정할 수 있게 된다.

 

이번 챕터는 여기까지다.