구현 방법
NetworkManager 스크립트
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using Photon.Pun;
using Photon.Realtime;
public class NetworkManager : MonoBehaviourPunCallbacks
{
private void Awake()
{
Screen.SetResolution(960, 540, false);
}
public void Connect()
{
PhotonNetwork.ConnectUsingSettings();
}
public override void OnConnectedToMaster() // 콜백 : 성공적으로 실행되었다면, 함수가 실행
{
Debug.Log("서버접속완료");
string name = "";
PhotonNetwork.LocalPlayer.NickName = name;
}
public void DisConnect()
{
PhotonNetwork.Disconnect();
}
public override void OnDisconnected(DisconnectCause cause)
{
Debug.Log("서버연결끊김");
}
public void JoinLobby()
{
PhotonNetwork.JoinLobby();
}
public override void OnJoinedLobby()
{
Debug.Log("로비접속완료");
}
// 방을 생성하는 것은 Connect 또는 JoinLobby 상태에서 가능
// 방만들기
// 성공 시, 방만들기완료, 방참가완료
// 방 이름이 겹치면 실패, 방만들기실패
public void CreateRoom()
{
string roomName = "Room";
PhotonNetwork.CreateRoom(roomName, new RoomOptions { MaxPlayers = 2 }); // MaxPlayers : 최대 플레이어 수
}
// 방참가
public void JoinRoom()
{
string roomName = "Room";
PhotonNetwork.JoinRoom(roomName);
}
// 현재 이름이 있다면 참가, 없다면 방만들기
public void JoinOrCreateRoom()
{
string roomName = "Room";
PhotonNetwork.JoinOrCreateRoom(roomName, new RoomOptions { MaxPlayers = 2 }, null);
}
// 방랜덤참가
public void JoinRandomRoom()
{
PhotonNetwork.JoinRandomRoom();
}
// 방랜덤참가, 없다면 방만들기
public void JoinRandomRoomOrCreateRoom()
{
// 최대 인원수 2인 방에 참가, 없다면 최대 인원수 2인 방 생성
PhotonNetwork.JoinRandomOrCreateRoom(expectedMaxPlayers : 2, roomOptions : new RoomOptions() { MaxPlayers = 2 });
}
// 방나가기
public void LeaveRoom()
{
PhotonNetwork.LeaveRoom();
}
public override void OnCreatedRoom()
{
Debug.Log("방만들기완료");
}
public override void OnJoinedRoom()
{
Debug.Log("방참가완료");
}
public override void OnCreateRoomFailed(short returnCode, string message)
{
Debug.Log("방만들기실패");
}
public override void OnPlayerEnteredRoom(Player newPlayer)
{
// 플레이어가 Room에 들어올 때, 실행
Debug.Log(newPlayer.NickName + "님이 입장하셨습니다");
}
public override void OnPlayerLeftRoom(Player otherPlayer)
{
// 플레이어가 Room에서 나갈 때, 실행
Debug.Log(otherPlayer.NickName + "님이 퇴장하셨습니다");
}
// 멀티 정보 확인
[ContextMenu("Multi Info")]
public void Info()
{
if(PhotonNetwork.InRoom) // 방에 있다면
{
Debug.Log("현재 방 이름 : " + PhotonNetwork.CurrentRoom.Name);
Debug.Log("현재 방 인원수 : " + PhotonNetwork.CurrentRoom.PlayerCount);
Debug.Log("현재 방 최대 인원수 : " + PhotonNetwork.CurrentRoom.MaxPlayers);
Debug.Log("현재 방의 마스터 클라이언트인지? : " + PhotonNetwork.IsMasterClient);
string playerStr = "방에 있는 플레이어 목록 : ";
for (int i = 0; i < PhotonNetwork.PlayerList.Length; i++)
{
playerStr += PhotonNetwork.PlayerList[i].NickName + ", ";
}
Debug.Log(playerStr);
}
else
{
Debug.Log("접속한 인원수 : " + PhotonNetwork.CountOfPlayers);
Debug.Log("방 개수 : " + PhotonNetwork.CountOfRooms);
Debug.Log("모든 방에 있는 인원수 : " + PhotonNetwork.CountOfPlayersInRooms);
Debug.Log("로비에 있는지? : " + PhotonNetwork.InLobby);
Debug.Log("연결됐는지? : " + PhotonNetwork.IsConnected);
}
}
}