유니티/PUN2

서버, 로비 접속 및 방 생성

잼잼재미 2024. 6. 6. 23:45

구현 방법


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);
        }
    }
}

'유니티 > PUN2' 카테고리의 다른 글

멀티 씬 이동  (1) 2024.06.15
Player 동기화 (PhotonTransformView, OnPhotonSerializeView , PhotonAnimatorView)  (0) 2024.06.13
채팅 구현  (0) 2024.06.11
동기화 방법  (0) 2024.06.06
PUN2 준비하기  (0) 2024.06.04