unihee1의 블로그
[TIL] Unity 멀티 구현 전 Photon에 대해 알아보기 본문
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 : 입장 가능 여부
'Unity' 카테고리의 다른 글
| [TIL] Unity 아이템 상호작용 구현하기 (0) | 2025.08.22 |
|---|---|
| [TIL] Unity 공격, 데미지 받기 기능 구현하기 (0) | 2025.08.20 |
| [TIL] Unity Raycast로 바닥 감지하기(점프 구현) (0) | 2025.08.13 |
| [TIL] Unity 1인칭 구현해 보기 (3) | 2025.08.11 |
| [TIL] Unity 흙먼지 파티클 만들어 보기 (3) | 2025.08.08 |