본문 바로가기

Photon

Photon 첫 날(photon의 구조, 세팅, 서버연결, 방 생성, 입장)

목차


 

Photon 의 구조

 

Http

 단방향

잠깐 연결됨.

한번 요청하고 나면 끊김

 

 

Socket (UDP, TCP)

양방향

계속 주고 받게 되어있음

포톤은 이 소켓구조임!

 

 

UDP 와 TCP 의 차이점

 

TCP(Transmission control protocol)

데이터의 안정성을 보장함!

안정성이라든지 유실이 되지 않음.

안정성 검사를 하기 댸문

UDP 보다 속도는 조금 느림!

 

 

UDP(User Datagram protocol)

데이터의 손실이 발생할 수 있다.

그래서 UDP 가 검사하는 작업이 없기 때문에 속도가 더 빠름!


포톤의 구조

 

Photon 엔진

 

클라이언트가 쉽게 MultiPlayer 를 만들 수 있게 할 수 있는 에셋!

 

Photon 구조

 

Client -> 우리가 만든 컨텐츠들

Name Server => AppId, GameVersion, 지역 이 세개가 같은 애들만 모아줌

 

이걸 Name에서 연결 한 후,

MasterServer 감

MasterServer 를 거쳐서 GameServer 로 가게 됨!!

 

MasterServer 는 Lobby 에 진입하기 위해 만들어짐!

Lobby 진입, 방 생성,  방 입장!

 

GameServer 로 가면, 멀티플레이 콘텐츠를 할 수 있는 공간이 됨!


Photon 세팅하기

 

로비 => 채널

 

채널이 하나만 있을 수 있지만, 사람이 많아지면 로비가 많아 질 수 밖에 없음!

일단 마스터 서버에 가는 것까지 해보자!

 

일단 플레이를 누르면 GameServer 까지 한번에 들어갈 수 있게 해 볼거임.

 

일단 앞쪽 UI 는 구성 안할거고

바로 GameServer 에 입장 할 수 있게 할거임!

 

왜그러냐면, 앞에거 다시 UI 까지 하면

방목록 만들기만 하고있을거기 때문.

 

상단에 CREATE A NEW APP

Pun 이 최신임!
Create!

Name 적고 CREATE!

 

20명 동접!

20 CCU => 동접 최대 20명인것

 

이거 다운받고 임포트 고고!

에셋 스토어에서 Photon PUN2  다운 받자!

pun -> Photon Unity Network

 

App Id 복사

아까 만들었던데서 클릭 해서 App ID 복사한다

 

Id, Versionm, Region 입력

여기에 입력.

 

못찾겠으면

Photon -> PhotonUnityNetWork -> Resources 에 들어가면 찾을 수 있다.


이제 Scene 3개 만들예정

1번 2번은 코딩으로 플레이로만 할 예정.


원래 있던 씬 위 처럼 이름 수정

 

Reload 까지.

 

그 후, ConnectionManager script 생성

빈 게임 오브젝트

ConnectionManager 도 생성 해서 넣자!


ConnectionManager.cs 생성해서 MasterServer 에 연결하기

여기 마스터 서버까지 진입 해보자!

마스터 서버까지 진입 한다고해서, 방이 생성되는건 아님!, Lobby 까지 진입하게 되는거임

 

ConnectionManager.cs

네임스페이스 추가!

상속을 MonoBehaviourPunCallbacks 로 바꾼다!

여기에 들어가보면 Interface 들이 나옴

옆에 노란색들은 인터페이스라고 함!

C# 은 여러개 상속.

즉, 다중 상속이 안됨

그럴 때, InterFace 를 추가해서 상속 할 수 있는데, 

이 InterFace 에는 함수의 틀만 넣을 수 있음! 정의만 되어있음

들어가보면 이렇게 가상함수가 있음
들어가봤을 때, 여기 인터페이스에 들어가보면
IConnectionCallbacks 에 들어가보면 이렇게 틀이 나온다.

다시 ConnectionManager 로 돌아와서 위처럼 작성한다.

 

Start() 에서 작성된

PhotonNetwork.ConnectUsingSettings() 는 포톤에 연결 시켜주는 코드이다.

 아까 나왔던 3가지. AppId , 지역, ID 를 서버에 요청한다.

 

근데 서버와의 작업은 항상, 요청을 했으면 호출을 받아야 한다.

 

밑에 나와있는 OnConnected()OnConeectedToMaster()

각각 NameServer 에 연결 요청을 하고, 성공 했을 시 호출되는 함수

.Master 서버에 연결 요청을 하고, 성공 했을 시에 호출되는 함수 이다.

 

print 안에 들어 있는 Syste.Reflection.MethodBase.GetCurrentMethod().Name 

을 쓰면 현재 내가 실행하고 있는 함수이름을 나오게 해줌

 

이렇게 해서  OnconnectedToMaster 로 하면, 딱 로비 진입 전 까지 한거임!

 

즉, 연결 요청을해서 들어가면 한번에 Master 까지 들어가게 되는거임!


이제 로비로 입장하게 하고, 호출 되면 씬을 이동시키도록 해보자!

마스터 입장되면 로비로 입장되게 하는 것!

빌드세팅 및 name Space 에 ScenemanageMent 추가!!

실행 해보면, 조금 있다가 Lobby 로 들어가짐


 

LobbyScene 에서 이제 LobbyManager 를 만들자.

빈 게임 오브젝트, 스크립트를 생성함!

방 생성 및 룸옵션 조정
호출 성공 및 실패
지금은 시작하자마자 시작되게끔


빌드 해서 방 생성 실패 해보기

 

Player Settings

방 생성 실패!

 

 

지금 이건 서로 같은 방을 만들려고 했기 때문에 Failed 가 되는거임

방이 이미 같은게 있는데 될리가 없음!


빌드 파일에서, Log 보는법

이 폴더 ㄱㄱ
여기 있는 프리팹을 Hierarchy 창에 그냥 드래그 앤 드랍 하면 됨

하면 게임 안에서 Console 창을 확인 할 수 있음!!


방에 참가하는 함수 만들기

(OnJoinedRoom)

 

현재 방장은 방을 생성 하면 동시에 방 입장 까지 됨!

 

지금은 생성을 한거고 

 

이제 방에 참가하는 함수를 만들어 보자!

지금 전체적으로, 서버에 요청 보내고 호출 받고, 함

먼저 실행해버리면

내가 방장이니까 방에 참가하는것 까지 함.

첫 번째가 B반 방을 생성하면

 

두 번째 사람이 들어왔을때, B반 방을 생성하려고 하면

방생성 실패가 되겠지? 이미 첫 번째가 만들었으니까,

 

그러니까, 만약 실패가 되면 Join Room 하게 하는 코드를 넣으면 됨!

 

LobbyManager.cs

에서 실패 되면 그 방으로 JoinRoom 하게 하는 함수 추가!

 

JoinRoom 함수는 이렇게 되어있음!

 


정리

 

Photon 

 

Connect -> MasterServer -> Lobby -> Room 순이다.

 

AppId, 지역, GameVersion 이 같으면 같은 MasterServer 에 입장하게 된다.

 

누군가가 A라는 방을 만들면 다른 누군가는 같은이름인 A라는 방을 만들 수 없다.

 

그러니, 코드를 짤 때, A라는 방을 만들건데, 입장에 Fail 하게 되면 JoinRoom(A) 로 하면 다른 누군가는 만들 수 있게된다.