09/29 - Photon Pun2 - 네트워크 멀티플레이 게임, 환경설정

댓글 0
댓글을 작성하려면 로그인이 필요합니다.
아직 댓글이 없습니다. 첫 번째 댓글을 작성해보세요.

댓글을 작성하려면 로그인이 필요합니다.
아직 댓글이 없습니다. 첫 번째 댓글을 작성해보세요.
멀티플레이 게임 서버를 직접 만들면 서버 프로그램 개발뿐 아니라 호스팅, 보안, 운영과 유지보수도 맡아야 한다. Photon PUN 2를 사용하면 Photon Cloud의 서버 기능을 이용하여 룸 기반 멀티플레이를 구현하고 게임 로직에 집중할 수 있다. 다만 게임 로직 자체가 자동으로 만들어지는 것은 아니다.
PhotonServerSettings에 설정한 Realtime App ID를 사용하여 연결한다. 실제 접속에는 App ID 외에 연결 설정과 서버 선택 과정도 관여한다.연결 흐름은 App ID로 게임 식별 → 마스터 서버 접속 → 룸 검색 또는 생성 → 게임 서버의 룸 입장이다. 로비에서는 룸 목록의 변경 사항을 받을 수 있지만, 게임 오브젝트와 플레이어의 게임 플레이 상태를 동기화하는 범위는 같은 룸에 참가한 플레이어들이다. 룸의 마스터 클라이언트는 룸 안의 한 플레이어를 뜻하며, 마스터 서버와 다른 개념이다.
PhotonLobbyManager.cs에 사용된 Photon APIpublic class PhotonLobbyManager : MonoBehaviourPunCallbacks — MonoBehaviourPunCallbacks는 Unity의 MonoBehaviour 기능을 가지면서 Photon의 연결·로비·룸 콜백을 override할 수 있게 한다. 이 스크립트처럼 Photon 콜백 메서드를 재정의할 때 MonoBehaviour 대신 상속한다.
public override void OnConnectedToMaster() — 마스터 서버에 접속하여 매칭 작업을 할 수 있게 되면 호출된다. 이 코드에서는 이어서 PhotonNetwork.JoinLobby()를 요청한다.public override void OnJoinedLobby() — 로비 입장이 완료되면 호출된다. 로비 입장과 룸 입장은 서로 다른 단계다.public override void OnLeftLobby() — 로비에서 나간 뒤 호출된다. 룸에 입장하면 로비에서는 나가게 된다.public override void OnJoinRandomFailed(short returnCode, string message) — JoinRandomRoom()이 입장할 룸을 찾지 못하면 호출된다. returnCode는 실패 코드, message는 설명이며, 이 코드에서는 새 룸을 만든다.public override void OnJoinedRoom() — 자신이 룸에 입장한 뒤 호출된다. 이때 현재 룸과 플레이어 정보를 화면에 표시한다.public override void OnLeftRoom() — 자신이 룸에서 나간 뒤 호출된다. 다른 플레이어가 나간 경우의 콜백과 구별한다.public override void OnPlayerEnteredRoom(Player newPlayer) — 다른 플레이어가 현재 룸에 들어왔을 때 호출된다. newPlayer가 들어온 플레이어다.public override void OnPlayerLeftRoom(Player otherPlayer) — 다른 플레이어가 현재 룸에서 나갔을 때 호출된다. otherPlayer가 나간 플레이어다.public override void OnDisconnected(DisconnectCause cause) — Photon 서버와의 연결이 끊어졌을 때 호출된다. cause가 종료 원인이며, 이 코드는 ServerTimeout 또는 ClientTimeout이면 재접속을 시도한다.PhotonNetwork.ConnectUsingSettings() — PhotonServerSettings에 저장된 App ID 등의 설정으로 연결을 시작한다. 연결이 완료되었는지는 이후 콜백으로 확인한다.PhotonNetwork.Disconnect() — Photon 연결을 종료한다. 종료 과정이 완료되면 OnDisconnected()가 호출된다.PhotonNetwork.Reconnect() — 연결이 끊어진 뒤 마스터 서버로 다시 접속을 시도한다. 반환값 true는 시도를 시작했다는 뜻이지, 연결 완료나 이전 룸 재입장을 뜻하지 않는다.PhotonNetwork.JoinLobby() — 로비 입장을 요청한다. 완료되면 OnJoinedLobby()가 호출된다.PhotonNetwork.LeaveLobby() — 로비 퇴장을 요청한다. 완료되면 OnLeftLobby()가 호출된다.PhotonNetwork.JoinRandomRoom() — 입장 가능한 룸을 찾아 입장을 요청한다. 찾지 못하면 OnJoinRandomFailed()가 호출된다.PhotonNetwork.CreateRoom("ComeOn", options) — 이름이 ComeOn인 룸을 options 설정으로 만들도록 요청한다. 이 코드의 RoomOptions options = new RoomOptions(); options.MaxPlayers = 4;는 새 룸의 최대 인원을 4명으로 지정한다.PhotonNetwork.LeaveRoom() — 현재 룸에서 나가도록 요청한다. 완료되면 OnLeftRoom()이 호출된다.PhotonNetwork.AutomaticallySyncScene = true — 같은 룸의 플레이어가 마스터 클라이언트의 씬 로드를 따라가도록 설정한다. 모든 게임 오브젝트 상태가 자동으로 동기화된다는 뜻은 아니다.PhotonNetwork.NickName = "Player" — 로컬 플레이어의 닉네임을 설정한다. 이 코드는 접속할 때 Player로 지정한다.PhotonNetwork.GameVersion = "1.1" — 함께 매칭될 게임 버전을 지정한다. 이 코드는 ConnectUsingSettings() 직후에 설정하며, Photon 문서상 인증 단계 전에 설정값이 반영될 수 있다.PhotonNetwork.IsConnected — 현재 Photon 연결 여부를 나타낸다. 연결 과정의 세부 단계나 룸 작업 가능 여부까지 뜻하지는 않는다.PhotonNetwork.InLobby, PhotonNetwork.InRoom — 각각 현재 로비와 룸에 들어가 있는지 나타낸다.PhotonNetwork.NetworkClientState — 현재 연결 단계를 ClientState 값으로 나타낸다. 이 코드는 PeerCreated와 Disconnected를 확인하여 연결 버튼 상태를 정한다.PhotonNetwork.CountOfPlayersOnMaster — 마스터 서버에서 룸을 찾는 등의 작업을 하는 플레이어 수다. 현재 로비 인원이라는 뜻은 아니다.PhotonNetwork.CountOfRooms — 사용 중인 룸 수를 나타내는 통계다. 위 통계와 함께 주기적으로 갱신되므로 즉시 변하는 실시간 카운터로 보지 않는다.PhotonNetwork.CurrentRoom — 자신이 참가 중인 Room 객체다. 룸 밖에서는 null이며, room.Name, room.PlayerCount, room.MaxPlayers로 룸 이름과 현재·최대 인원을 읽는다.PhotonNetwork.PlayerList — 현재 룸의 플레이어 목록이다. 각 Player의 ActorNumber는 그 룸 안에서의 번호, NickName은 닉네임, IsMasterClient는 해당 플레이어가 룸의 마스터 클라이언트인지 나타낸다.Window → Multiplayer Play Mode를 열면 한 컴퓨터에서 여러 플레이어를 실행해 멀티플레이 동작을 시험할 수 있다. 메뉴가 보이지 않으면 Package Manager에 Multiplayer Play Mode 패키지가 설치되어 있는지 확인한다. 이 도구는 테스트 실행 환경이며, Photon의 로비나 룸 자체는 아니다.
Develog는 단순히 글을 쓰는 공간이 아닙니다. 성장의 과정을 기록하고, 그 기록으로 나를 증명하며 원하는 기회를 얻는 곳이길 바랐습니다. 누군가의 꿈으로 향하는 중간다리가 되는 것, 그것이 Develog를 만든 이유입니다.

우리들의 게임 발매 이야기

안녕하세요. 플밍 4기 입니다. 게임 개발을 배우기 전 네트워크 엔지니어 도메인에서 익히고 배웠던 네트워크 이론에 대한 기초 입니다. 학습에 도움이 되길 바라며 공유 드립니다.
Develog는 단순히 글을 쓰는 공간이 아닙니다. 성장의 과정을 기록하고, 그 기록으로 나를 증명하며 원하는 기회를 얻는 곳이길 바랐습니다. 누군가의 꿈으로 향하는 중간다리가 되는 것, 그것이 Develog를 만든 이유입니다.



안녕하세요. 플밍 4기 입니다. 게임 개발을 배우기 전 네트워크 엔지니어 도메인에서 익히고 배웠던 네트워크 이론에 대한 기초 입니다. 학습에 도움이 되길 바라며 공유 드립니다.