안녕하세요.
게임에서 네트워크가 가능한 게임을 만들기 위해서는 서버가 필요합니다.
네트워크를 쉽게 유니티에 적용 할 수 있는 솔루션인 포톤에 대해 배워볼까 합니다.
정보 출처: https://doc.photonengine.com/ko-kr/pun/current/demos-and-tutorials/pun-basics-tutorial/lobby
첫 단계로 포톤 클라우드 서버에 connect하는 것과 서버 로비에 참가 또는 필요시 생성에 대한 것을 알아보겠습니다!
using UnityEngine;
using Photon.Pun;
using Photon.Realtime;
//namespace는 필수는 아니나 다른 에셋과 개발자의 코드와의 충돌을 방지하기위해 사용
namespace Com.MyCompany.MyGame
{
//MonoBehaviourPunCallbacks
//.photonView와 PUN이 호출할 수 있는 모든 콜백 / 이벤트를 제공하는 클래스.
//클래스에서 제공하는 이벤트 / 메서드를 재정의하여 사용
public class Launcher : MonoBehaviourPunCallbacks
{
//게임 버전을 나타내는 변수
//이미 출시되어 프로젝트에 큰 변경사항이 있을 때 까진 "1"을 유지
private string _gameVersion = "1";
//방의 최대 입장인원
[SerializeField] private byte _maxPlayerPerRoom = 4;
private void Awake()
{
//이 값이 true일 때 MasterClient는 PhotonNetwork.LoadLevel()을
//호출 가능하며 모든 연결된 플레이어들은 동일한 레벨을 자동적으로 로드 가능
PhotonNetwork.AutomaticallySyncScene = true;
}
private void Start()
{
Connect();
}
public void Connect()
{
//포톤 네트워크와 연결이 됬을 경우 true, 연결되지 않았을 경우 false를 반환
//만약 포톤 네트워크와 연결되었을 경우?
if (PhotonNetwork.IsConnected)
{
//현재 사용되는 로비의 입장 가능한 방에 참여. 입장 가능한 방이 없으면 실패
//입장 성공시 OnJoinedRoom함수 호출
//입장 실패시 OnJoinRandomFailed함수 호출
PhotonNetwork.JoinRandomRoom();
}
//연결되지 않았을 경우
else
{
//게임 버전을 설정한다.
PhotonNetwork.GameVersion = _gameVersion;
//Photon Editer에 설정된 값대로 서버 접속을 시작하는 지점
//접속에 성공하면 OnConnectedToMaster 함수 호출(콜백)
PhotonNetwork.ConnectUsingSettings();
}
}
//MonoBehaviourPunCallbacks의 함수
//클라이언트가 마스터 서버에 연결되어 작업을 수행할 준비가 되면 호출
//PhotonNetwork.ConnectUsingSettings()로 서버 접속이 성공하면 이 함수 호출
public override void OnConnectedToMaster()
{
Debug.Log("서버 접속 성공!");
//현재 사용되는 로비의 입장 가능한 방에 참여. 입장 가능한 방이 없으면 실패
//입장 성공시 OnJoinedRoom함수 호출
//입장 실패시 OnJoinRandomFailed함수 호출
PhotonNetwork.JoinRandomRoom();
}
//MonoBehaviourPunCallbacks의 함수
//서버와의 연결이 끊은 후 호출
//PhotonNetwork.Disconnect()가 성공하면 호출
public override void OnDisconnected(DisconnectCause cause)
{
Debug.LogWarningFormat("서버연결 끊어짐!{0}", cause);
}
//MonoBehaviourPunCallbacks의 함수
//PhotonNetwork.JoinRandomRoom()로 방 참가가 실패하면 호출
public override void OnJoinRandomFailed(short returnCode, string message)
{
Debug.Log("랜덤 매칭 실패!");
//방을 생성하는 함수
//변수목록( roomName = 방의 이름, RoomOptions = 최대 입장 가능 인원, 초기 사용자 정의, 룸 속성등을 설정 가능
//RoomOptions의 자세한 설명 https://doc-api.photonengine.com/en/pun/v1/class_room_options.html
//typedLobby = null인 경우 룸은 형재 사용되는 로비에 자동 생성[명시하지 않은 경우 "default"]
PhotonNetwork.CreateRoom("방 이름", new RoomOptions {MaxPlayers = _maxPlayerPerRoom});
}
//MonoBehaviourPunCallbacks의 함수
//방에 참가하면 호출
//PhotonNetwork.CreateRoom(), PhotonNetwork.JoinedRoom()이 성공하면 호출
public override void OnJoinedRoom()
{
Debug.Log("방 접속 성공!");
}
}
}
포톤 서버에 접속 후 랜덤한 방에 접속 시도를 하고 접속가능한 방이 없을 경우 방을 생성하는 클래스의 코드입니다.
'Photon Engine' 카테고리의 다른 글
[Unity Photon] 공부 3(게임 씬) (0) | 2023.10.24 |
---|---|
[Unity Photon] 공부 2(로비 UI) (0) | 2023.10.22 |