🏆 목차.
🛒 마스터 서버란?
마스터 서버는 룸의 목록을 유지하고 클라이언트가 게임 서버에 연결할 때 중간 역할을 하는 서버입니다.
마스터 서버는 로비 및 방 관리, 플레이어 관리 등 다양한 역할을 하는데 오늘 이를 이용해서
로비에 입장하는 기능을 구현해 보겠습니다.
🎨 로비 입장하기
로비 입장 기능을 구현하기 전 PUN 아이디를 입력해 주겠습니다.
PUN 아이디는 저번 글에서 발급받는 방법에 대해 알려드렸습니다.
Photon Server Setting Inspector 창은
Window -> Photon Unity Networking -> Highlight Server Settings를 누르면 나옵니다.
로비 입장 기능을 구현하기 전 간단하게 닉네임 입력과 접속 버튼 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을 이용해서 씬을 이동해야 합니다.
🎯 결과
이제 닉네임을 입력하고 접속 버튼을 누르면 마스터 서버 접속 -> 로비 진입을 성공적으로 하게 되었습니다.
이번에 닉네임을 입력하고 마스터 서버에 접속해서 로비에 진입하는 것을 다뤄봤습니다.
다음 글에서는 로비에서 방을 만들고 접속하는 것을 해보겠습니다.
'유니티' 카테고리의 다른 글
[Unity 3D] 오브젝트가 컬링되는 이유 (1) | 2023.10.28 |
---|---|
[Unity] 포톤서버 방 만들기 및 입장 (2) | 2023.10.03 |
[Unity] 포톤 서버 구축 (0) | 2023.10.02 |
[Unity] 최적화 : Mesh Baker(메쉬 결합) (0) | 2023.09.29 |
[Unity] 유니티 : 싱글톤(Singleton) 패턴 (0) | 2023.09.04 |