네트워크 콘텐츠 제작

[Photon Pun2] 룸 생성,입장 / 빌드

노재두내 2024. 10. 23. 15:54

저번에는 서버 접속, 로비 생성, 접속까지 해봤다.

 

오늘은 생성 및 접속을 해보자.


1. 로비 접속 -> 랜덤 룸 입장 -> 실패 -> 룸 생성

using Photon.Pun;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using Photon.Realtime;

//클래스 상속
public class GameManager : MonoBehaviourPunCallbacks
{
    //포톤 게임 버전을 설정하기 위한 변수, 같은 게임 버전끼리 공유가 된다.이 클라이언트의 버전 번호입니다. 사용자는 gameVersion으로 서로 구분됩니다(이를 통해 획기적인 변경이 가능함).
    private readonly string version = "1.0";
    private string userId = "syyeom1002";

    private void Awake()
    {
        //마스터 client와 일반 client의 레벨을 동기화 할지 결정한다. true일 시, 마스터 client에서 레벨 변경 시 모든 client들이 자동으로 동일한 레벨을 로드한다.
        PhotonNetwork.AutomaticallySyncScene = true;
        PhotonNetwork.GameVersion = this.version;
        PhotonNetwork.NickName = this.userId;
        Debug.Log(PhotonNetwork.NickName);
        //Photon Cloud에 연결 되는 시작 지점
        PhotonNetwork.ConnectUsingSettings();
    }

    public override void OnConnectedToMaster()
    {
        Debug.Log("마스터 서버에 접속");
        Debug.LogFormat("PhotonNetwork.InLobby: {0}", PhotonNetwork.InLobby);
        PhotonNetwork.JoinLobby();
    }

    public override void OnJoinedLobby()
    {
        Debug.Log("로비 접속");
        Debug.LogFormat("PhotonNetwork.InLobby: {0}", PhotonNetwork.InLobby);

        //만들어져있는 임의 룸에 입장을 시도, 룸이 없다면 Failed
        PhotonNetwork.JoinRandomRoom();
    }

    public override void OnJoinRandomFailed(short returnCode, string message)
    {
        Debug.LogFormat("{0}, {1}", returnCode, message);
        this.CreateRoom("TestRoom123");
    }

    private void CreateRoom(string roomName)
    {
        //기본형 : PhotonNetwork.CreateRoom(null, new RoomOptions { MaxPlayers = maxPlayersPerRoom });
        RoomOptions options = new RoomOptions();
        options.MaxPlayers = 20;
        options.IsOpen = true;
        options.IsVisible = true;
        PhotonNetwork.CreateRoom(roomName, options);
    }

    public override void OnCreatedRoom()
    {
        Debug.Log("룸 생성완료");
        Debug.LogFormat("PhotonNetwork.CurrentRoom.Name : {0}", PhotonNetwork.CurrentRoom.Name);
    }

    public override void OnCreateRoomFailed(short returnCode, string message)
    {
        Debug.LogFormat("{0}, {1}", returnCode, message);
    }
}

● RoomOptions 사용하려면 using Photon.Realtime; 네임스페이스를 선언해줘야한다.

룸 생성이 정상적으로 된 모습

 


2. 로비 접속 -> 랜덤 룸 입장 -> 실패 -> 룸 생성 -> 룸 접속

이제 룸이 생성되면 자동으로 룸에 입장하도록 하자

OnJoinedRoom 콜백 함수가 호출

public override void OnJoinedRoom()
    {
        Debug.Log("룸 입장");
        Debug.LogFormat("PhotonNetwork.CurrentRoom.PlayerCount: {0}", PhotonNetwork.CurrentRoom.PlayerCount);
    }

위 코드를 추가해주고 실행해주면

룸 입장과 룸에 있는 플레이어 수가 잘 출력되는 모습

 


3. 빌드해보자

빌드해서 PlayerCount가 2가 되는지 확인해보자

Player Setting ->Fullscreen Mode Windowed로 변경

Build라는 폴더 생성 여기에 빌드

 

exe 파일 실행 + 유니티도 실행 

 

 

2로 잘 나오는 모습 !!!!!!

 

참고로 exe파일에는 로그가 안떠서 확인할 수 없기 때문에

exe파일 먼저 실행하고 그 다음에 유니티를 실행하기 바란다.

 


※ GetRegions failed. AppId is unknown on the cloud server 오류

코드가 바뀐게 없는데 갑자기 이런 오류가 났다. 

gpt한테 물어보니까

 

Photon App ID 설정 확인:

  • Photon 웹사이트에 로그인하여 프로젝트의 App ID를 복사한 후 Unity에서 PhotonServerSettings에 올바르게 입력했는지 확인하세요.

이렇게 말하길래

PhotonServerSettings에서의 appid와 포톤 웹사이트에서 생성했던 appid가 서로 달라져있었다.. 언제 잘못 건드렸나 싶은데 

암은 홈페이지 appid를 다시 PhotonServerSettings의 appid에 붙여넣으니까 다시 제대로 동작한다ㅡㅡ.