728x90

 

🏆 목차.

  1. 마스터 서버란?
  2. 로비 입장하기
  3. 결과

 

🛒 마스터 서버란?

 

마스터 서버는 룸의 목록을 유지하고 클라이언트가 게임 서버에 연결할 때 중간 역할을 하는 서버입니다.

마스터 서버는 로비 및 방 관리, 플레이어 관리 등 다양한 역할을 하는데 오늘 이를 이용해서

로비에 입장하는 기능을 구현해 보겠습니다.

 

🎨 로비 입장하기

 

로비 입장 기능을 구현하기 전 PUN 아이디를 입력해 주겠습니다.

PUN 아이디는 저번 글에서 발급받는 방법에 대해 알려드렸습니다.

 

[Unity] 포톤 서버 구축

🏆 목차. 개요 포톤이란? 포톤 아이디 발급 Run2 설치 🛒 개요 이번 글에서 멀티 플레이 게임 개발에 많이 사용되는 포톤 서버를 이용해서 간단하게 방을 만들고 입장하는 기능을 구현해 보겠습

wookeee.tistory.com

 

Photon Server Setting Inspector 창은

Window -> Photon Unity Networking -> Highlight Server Settings를 누르면 나옵니다.

 

포톤-아이디-입력
포톤 아이디 입력

 

로비 입장 기능을 구현하기 전 간단하게 닉네임 입력과 접속 버튼 UI를 배치해 주었습니다.

이 화면을 타이틀이라고 부르겠습니다.

 

타이틀-UI
타이틀 UI

 

using Photon.Pun;
using System;
using System.Collections;
using System.Collections.Generic;
using Unity.VisualScripting;
using UnityEngine;
using UnityEngine.SceneManagement;
using UnityEngine.UI;


public class ConnectionManager : MonoBehaviourPunCallbacks
{
    private ConnectionManager s_instance;
    public ConnectionManager Instance { get { return s_instance; } }

    [SerializeField]
    InputField inputText;
    [SerializeField]
    Button inputButton;

    void Start()
    {
        //내용이 변경되었을때
        inputText.onValueChanged.AddListener(OnValueChanged);
        //내용을 제출했을때
        inputText.onSubmit.AddListener(OnSubmit);
        //커서가 다른곳을 누르면
        inputText.onEndEdit.AddListener(
            (string s) =>
            {
                Debug.Log("OnEndmit" + s);
            }
        );
        inputButton.onClick.AddListener(OnClickConnect);
    }

    void OnValueChanged(string s)
    {
        inputButton.interactable = s.Length > 0;
    }
    void OnSubmit(string s)
    {
        Debug.Log("OnSubmit " + s);
    }

    public override void OnConnectedToMaster()
    {
        base.OnConnectedToMaster();
        Debug.Log("마스터 서버 접속 성공");

        //나의 이름을 포톤에 설정
        PhotonNetwork.NickName = inputText.text;
        //로비진입
        PhotonNetwork.JoinLobby();
    }
    //Lobby 진입을 성공했으면 호출되는 함수
    public override void OnJoinedLobby()
    {
        base.OnJoinedLobby();

        //로비 씬으로 이동
        PhotonNetwork.LoadLevel("LobbyScene");
  
        print("로비 진입 성공");
        
    }
    public void OnClickConnect()
    {
        // 마스터 서버 접속 요청
        PhotonNetwork.ConnectUsingSettings();
    }
}

 

기본적인 유니티 C# 스크립트와 다른 점은 MonoBehavior를 상속받고 있는 게 아니라 MonoBehaviourPunCallbacks를 상속받고 있다는 점입니다.

 

void OnValueChanged 

- 닉네임을 입력했을 때만 로비에 입장할 수 있게 버튼의 클릭 이벤트 핸들러에 등록해 주었습니다.

닉네임의 길이가 0보다 커야지만 interactable이 활성화되어 버튼을 클릭할 수 있습니다.

 

public void OnClickConnect()

- 활성화된 버튼을 누르면 PhotonNetwork의 ConnectUsingSettings() 함수가 호출되고 마스터 서버에 접속을 요청하게 됩니다.

 

public override void OnConnectedToMaster

부모 클래스의 함수로 정상적으로 마스터 서버에 접속하게 되면 호출이 되는 함수입니다.

자식 클래스인 ConnectionManager에서 닉네임 입력과 로비 입장을 위해 재정의를 했습니다.

그리고 로비에 입장을 하도록 했습니다.

 

여기서 알 수 있듯 대부분의 기능은 PhotonNetwork에서 지원을 하고 있습니다.

 

 public override void OnJoinedLobby()

- 부모 클래스의 함수로 로비 입장에 성공했으면 호출되는 함수입니다.

정상적으로 입장을 하면 따로 만들어둔 로비 씬으로 이동하도록 했습니다.

여기서도 보통 씬 매니저를 통해서 씬 이동을 하지만 포톤에서는 LoadLevel을 이용해서 씬을 이동해야 합니다.

 

🎯 결과

 

이제 닉네임을 입력하고 접속 버튼을 누르면 마스터 서버 접속 -> 로비 진입을 성공적으로 하게 되었습니다.

 

 

이번에 닉네임을 입력하고 마스터 서버에 접속해서 로비에 진입하는 것을 다뤄봤습니다.

다음 글에서는 로비에서 방을 만들고 접속하는 것을 해보겠습니다.

728x90

+ Recent posts