네트워크 게임에 참여하려면 맨 먼저 포톤 서버에 접속해야한다. 포톤서버는 로비와 룸의 개념이 존재한다.

함수를 통해 로비에 입장하면 룸들의 리스트를 얻을수 있고 특정 룸을 선택해 입장해서 그 방에 있는 유저들과 게임을 함께 할 수 있다.

 

포톤 서버에 접속해 룸을 생성하는 절차를 처리할 스크립트를 만들어 보자.  하이라키뷰에 빈게임오브젝트를 만들고 이름을 PhotonManager라고 한다. 동일 이름으로 스크립트를 만들고 연결한다.

포톤 API를 사용하기 위한 네임스페이스를 선언해야한다

using Photon.Pun;  //포톤 API를 위한 네임스페이스
using Photon.Realtime; //포톤 API를 위한 네임스페이스

PhotonManager 스크립트는 포톤의 다양한 기능을 사용하기 위해 MonoBehaviourPunCallbacks Class를 베이스 클래스로 변경한다.

public class PhotonManager : MonoBehaviourPunCallbacks {
}

Awake() 함수에서 포톤의 기본적 설정을 한후 접속하는 코드이다.

룸을 생성한 유저는 자동으로 입장하고 방장이 된다. 

PhotonNetwork.AutomaticallySyncScene = true;  // 마스터 클라이언트의 씬 자동 동기화 옵션

동일 버전의 유저끼리만 접속을 허용해준다.

PhotonNetwork.GameVersion = version; // 게임 버전 설정
PhotonNetwork.NickName = userId;  //접속 유저의 닉네임 설정

포톤서버와의 초당 통신회수를 정한다 디폴트는 30회이다

Debug.Log(PhotonNetwork.SendRate);// 포톤 서버와의 데이터의 초당 전송 횟수

설정을 마치면 서버에 접속한다.

PhotonNetwork.ConnectUsingSettings(); // 포톤 서버 접속

서버에 접속되면 제일 먼저 OnConnectedToMaster() 콜백함수가 호출된다. 여기서 로비에 입장했는지 체크해보자

Debug.Log($"PhotonNetwork.InLobby = {PhotonNetwork.InLobby}");

포톤은 로비에 자동으로 입장할수 없기 때문에 False가 출력된다. JoinLobby로 입장해보자

PhotonNetwork.JoinLobby();

제대로 입장되었다면 OnJoinedLobby()콜백이 호출된다.

public override void OnJoinedLobby() {
    Debug.Log($"PhotonNetwork.InLobby = {PhotonNetwork.InLobby}");
    // 수동으로 접속하기 위해 자동 입장은 주석처리
    // PhotonNetwork.JoinRandomRoom();        
}
using UnityEngine;
using TMPro;
using Photon.Pun;  //포톤 API를 위한 네임스페이스
using Photon.Realtime; //포톤 API를 위한 네임스페이스
using System.Collections.Generic;

public class PhotonManager : MonoBehaviourPunCallbacks {
    private readonly string version = "1.0"; // 게임의 버전
    private string userId = "Zack"; // 유저의 닉네임  

    void Awake() {      
        PhotonNetwork.AutomaticallySyncScene = true;  // 마스터 클라이언트의 씬 자동 동기화 옵션
        PhotonNetwork.GameVersion = version; // 게임 버전 설정
        PhotonNetwork.NickName = userId;  //접속 유저의 닉네임 설정
        // 포톤 서버와의 데이터의 초당 전송 횟수
        Debug.Log(PhotonNetwork.SendRate);
        PhotonNetwork.ConnectUsingSettings(); // 포톤 서버 접속
    }

    public override void OnConnectedToMaster() {
        Debug.Log("Connected to Master!");
        Debug.Log($"PhotonNetwork.InLobby = {PhotonNetwork.InLobby}");
        PhotonNetwork.JoinLobby();
    }

    // 로비에 접속 후 호출되는 콜백 함수
    public override void OnJoinedLobby() {
        Debug.Log($"PhotonNetwork.InLobby = {PhotonNetwork.InLobby}");
        // 수동으로 접속하기 위해 자동 입장은 주석처리
        // PhotonNetwork.JoinRandomRoom();        
    }
}

실행해보면 한국 서버인 kr로 접속되고 Master에 연결된후 InLobby된다.

+ Recent posts