unihee1의 블로그
[TIL] Unity 멀티 구현하기_ 1. Photon 연결하기 본문
2025.08.18 - [Unity] - [TIL] Unity 멀티 구현 전 Photon에 대해 알아보기
[TIL] Unity 멀티 구현 전 Photon에 대해 알아보기
1. Photon이란?멀티플레이 게임용 유니티 패키지로 유연한 매치메이킹을 통해 플레이어들을 네트워크를 통해 동기화될 수 있는 룸으로 이끌어준다.RPC, 사용자 정의 등의 이벤트들을 제공해주며
unihee1.tistory.com
1. 개요
오늘은 Unity에서 멀티플레이 게임 구현의 첫걸음으로 Photon PUN을 이용해 서버와 연결하는 방법을 공부하였다.
연결 상태를 확인하고 Photon 이벤트 콜백을 통해 서버 연결 성공/실패를 확인하는 내용을 다루겠다.
2. Photon 앱 생성하기
먼저 https://www.photonengine.com/ 링크에 접속하여 회원가입을 해준다.

회원가입을 완료하면 로그인을 해주고 위의 사진과 같이 Deshboard를 눌러준다.
그러면 Create a New App이 보이는데 이를 눌러주고 앱을 만들 준비를 한다.

Application Name을 입력해주고 Create 버튼을 눌러 앱 생성을 마친다.
3. Unity와 Photon 연결하기

유니티 에셋스토어에서 Photon을 다운 받고 프로젝트에서 import하면 위의 사진과 같은 창이 뜨게 된다.
AppId or Email란에 AppId를 입력해 주면 되는데 AppId는 아래와 같은 방법으로 알 수 있다.


생성된 앱의 Manage를 눌러 들어가면 Manage 프로젝트명 바로 아래에서 확인할 수 있다.
4. Photon 서버에 잘 연결 되는지 확인하기
PhotonConnectTest 스크립트를 만들어 서버와 잘 연결 되는지 확인해 보겠다.
using Photon.Pun;
using UnityEngine;
public class PhotonConnectTest : MonoBehaviourPunCallbacks
{
void Start()
{
// Photon 서버에 연결 시도
PhotonNetwork.ConnectUsingSettings();
Debug.Log("Photon 연결 시도 중");
}
public override void OnConnectedToMaster()
{
Debug.Log("Photon 서버 연결 성공!");
}
public override void OnDisconnected(Photon.Realtime.DisconnectCause cause)
{
Debug.Log("Photon 서버 연결 실패: " + cause.ToString());
}
}
먼저 MonoBehaviour가 아닌 MonoBehaviourPunCallbacks로 수정해줘야 한다.
왜냐하면 Photon 관련 콜백 함수들을 사용하기 위해서는 일반적으로 상속 받는 Monobehaviour가 아닌 MonoBehaviourPunCallbacks를 상속받아야 하기 때문이다.
- Start: PhotonNetwork.ConnectUsingSettings()를 사용하여 서버와 연결
- OnConnectedToMaster: 서버와 연결 성공되면 호출되는 함수
- OnDisconnected: 서버와 연결 실패되면 호출되는 함수
빈 게임 오브젝트를 만들고 해당 스크립트를 할당한 후 실행하면 아래와 같이 콘솔창에서 Debug.Log로 성공 여부를 알 수 있다.

5. 룸 생성 및 입장 테스트
서버 연결에 성공했으니 이번엔 랜덤 룸 입장과 룸 생성이 가능한지 테스트 해보려고 한다.
PhotonRoomTest 스크립트를 작성하여 빈 게임 오브젝트에 할당해서 테스트 해보겠다.
using Photon.Pun;
using Photon.Realtime;
using UnityEngine;
public class PhotonRoomTest : MonoBehaviourPunCallbacks
{
void Start()
{
PhotonNetwork.ConnectUsingSettings();
}
public override void OnConnectedToMaster()
{
Debug.Log("서버 연결 성공, 랜덤 룸 입장 시도...");
PhotonNetwork.JoinRandomRoom();
}
public override void OnJoinRandomFailed(short returnCode, string message)
{
Debug.Log("랜덤 룸 입장 실패, 새로운 룸 생성");
PhotonNetwork.CreateRoom(null, new RoomOptions { MaxPlayers = 4 });
}
public override void OnJoinedRoom()
{
Debug.Log("룸 입장 성공! 현재 룸 플레이어 수: " + PhotonNetwork.CurrentRoom.PlayerCount);
}
}
PhotonConnectTest 스크립트와 마찬가지로 MonoBehaviourPunCallbacks로 수정하고 Start에서 서버와 연결해준다.
- OnConnectedToMaster: 연결에 성공하면 PhotonNetwork.JoinRandomRoom()을 통해 무작위 룸에 들어감
- OnJoinRandomFailed: 룸에 참가하는 것을 실패하면 PhotonNetwork.CreateRoom를 통해 룸을 생성
- OnJoinedRoom: 룸에 들어가는 것을 성공하면 호출
실행하면 다음과 같이 콘솔창에서 결과가 뜬다

생성된 방이 없기 때문에 랜덤 룸에 들어가지 못하고 새로운 룸을 만들어 입장하였다.
'Unity' 카테고리의 다른 글
| [TIL] Unity 멀티 구현하기 _ 3. 트러블슈팅 (2) | 2025.08.28 |
|---|---|
| [TIL] Unity 멀티 구현하기_ 2. 방 생성과 입장 (0) | 2025.08.27 |
| [TIL] Unity 아이템 상호작용 구현하기 (0) | 2025.08.22 |
| [TIL] Unity 공격, 데미지 받기 기능 구현하기 (0) | 2025.08.20 |
| [TIL] Unity 멀티 구현 전 Photon에 대해 알아보기 (0) | 2025.08.18 |