Notice
Recent Posts
Recent Comments
Link
«   2026/04   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30
Tags
more
Archives
Today
Total
관리 메뉴

unihee1의 블로그

[TIL] Unity 멀티 구현 전 Photon에 대해 알아보기 본문

Unity

[TIL] Unity 멀티 구현 전 Photon에 대해 알아보기

unihee1 2025. 8. 18. 20:10

1. Photon이란?

멀티플레이 게임용 유니티 패키지로 유연한 매치메이킹을 통해 플레이어들을 네트워크를 통해 동기화될 수 있는 룸으로 이끌어준다.

RPC,  사용자 정의 등의 이벤트들을 제공해주며 빠르고 신뢰할 수 있는 커뮤니케이션은 전용 Photon 서버를 통해 이루어지므로 클라이언트들은 1:1 연결이 필요하지 않다.

 

2. Photon 룸과 로비

  • 룸: Photon 클라우드는 룸 기반 게임으로 구축되며 경기당 제한된 플레이어 수가 있음
    • 룸 안에서 모든 사람은 다른 사람이 보낸 것을 수신함
    • 룸 밖에서는 통신 할 수 없기 때문에 가능한 빨리 룸 안으로 입장 시켜야 함
    • 룸 안으로 들어가는 가장 좋은 방법은 무작위 매치메이킹을 이용하는 것
    • 모든 룸은 식별자로써 이름을 가지고 있음
  • 로비: 마스터 서버에서 존재하며 게임의 룸 목록을 제공

 

3. 서버 접속 및 룸 접근, 생성 메소드

- PhotonNetwork.ConnectUsingSettings(): 즉시 온라인 상태로 만듦(Photon Cloud에 연결되는 시작 지점)

- PhotonNetwork.JoinRoom("RoomName"): 해당 룸 이름에 맞는 룸에 입장

- PhotonNetwork.JoinRandomRoom(): 랜덤으로 룸 입장

- PhotonNetwork.CreateRoom("RoomName"); 해당 룸 이름에 맞는 룸 생성

※ 랜덤 룸 입장에 실패 했을 때

public override void OnJoinRandomFailed(short returnCode, string message)
{
    Debug.Log("PUN Basics Tutorial/Launcher:OnJoinRandomFailed() was called by PUN. No random room available, so we create one.\nCalling: PhotonNetwork.CreateRoom");

    // #Critical: we failed to join a random room, maybe none exists or they are all full. No worries, we create a new room.
    PhotonNetwork.CreateRoom(null, new RoomOptions());
}

public override void OnJoinedRoom()
{
    Debug.Log("PUN Basics Tutorial/Launcher: OnJoinedRoom() called by PUN. Now this client is in a room.");
}

 

랜덤 룸 입장에 실패했을 때 룸을 실제로 생성해야 하기 때문에  OnJoinRandimFailed()라는 메소드에 PhotonNetwork.CreateRoom을 사용하여 룸을 생성한다

 

4. Photon에서의 룸 옵션

RoomOptions roomOptions = new RoomOptions();
roomOptions.MaxPlayers = 4;
roomOptions.IsVisible = true;
roomOptions.IsOpen = true;
PhotonNetwork.CreateRoom("RoomName", roomOptions);

 

  • MaxPlayers : 최대 플레이어 수 제한
  • IsVisible : 룸 목록에 표시 여부
  • IsOpen : 입장 가능 여부