목차
- Photon 의 구조
- Photon 세팅하기
- ConnectionManager.cs 생성해서 MasterServer 에 연결하기
- 빌드 해서 방 생성 실패 해보기
- 빌드 파일에서, Log 보는법
- 방에 참가하는 함수 만들기
- 정리
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
Name 적고 CREATE!
20 CCU => 동접 최대 20명인것
에셋 스토어에서 Photon PUN2 다운 받자!
pun -> Photon Unity Network
아까 만들었던데서 클릭 해서 App ID 복사한다
여기에 입력.
못찾겠으면
Photon -> PhotonUnityNetWork -> Resources 에 들어가면 찾을 수 있다.
이제 Scene 3개 만들예정
1번 2번은 코딩으로 플레이로만 할 예정.
Reload 까지.
그 후, ConnectionManager script 생성
빈 게임 오브젝트
ConnectionManager 도 생성 해서 넣자!
ConnectionManager.cs 생성해서 MasterServer 에 연결하기
마스터 서버까지 진입 한다고해서, 방이 생성되는건 아님!, Lobby 까지 진입하게 되는거임
ConnectionManager.cs
상속을 MonoBehaviourPunCallbacks 로 바꾼다!
여기에 들어가보면 Interface 들이 나옴
C# 은 여러개 상속.
즉, 다중 상속이 안됨
그럴 때, InterFace 를 추가해서 상속 할 수 있는데,
이 InterFace 에는 함수의 틀만 넣을 수 있음! 정의만 되어있음
다시 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 를 만들자.
빈 게임 오브젝트, 스크립트를 생성함!
빌드 해서 방 생성 실패 해보기
방 생성 실패!
지금 이건 서로 같은 방을 만들려고 했기 때문에 Failed 가 되는거임
방이 이미 같은게 있는데 될리가 없음!
빌드 파일에서, Log 보는법
하면 게임 안에서 Console 창을 확인 할 수 있음!!
방에 참가하는 함수 만들기
(OnJoinedRoom)
현재 방장은 방을 생성 하면 동시에 방 입장 까지 됨!
지금은 생성을 한거고
이제 방에 참가하는 함수를 만들어 보자!
지금 전체적으로, 서버에 요청 보내고 호출 받고, 함
내가 방장이니까 방에 참가하는것 까지 함.
첫 번째가 B반 방을 생성하면
두 번째 사람이 들어왔을때, B반 방을 생성하려고 하면
방생성 실패가 되겠지? 이미 첫 번째가 만들었으니까,
그러니까, 만약 실패가 되면 Join Room 하게 하는 코드를 넣으면 됨!
에서 실패 되면 그 방으로 JoinRoom 하게 하는 함수 추가!
정리
Photon
Connect -> MasterServer -> Lobby -> Room 순이다.
AppId, 지역, GameVersion 이 같으면 같은 MasterServer 에 입장하게 된다.
누군가가 A라는 방을 만들면 다른 누군가는 같은이름인 A라는 방을 만들 수 없다.
그러니, 코드를 짤 때, A라는 방을 만들건데, 입장에 Fail 하게 되면 JoinRoom(A) 로 하면 다른 누군가는 만들 수 있게된다.
'Photon' 카테고리의 다른 글
Photon 여섯 째날 (LobbyScene 꾸미기, RemoveRoomListUI(),UpdateRoomCache()) (1) | 2022.09.14 |
---|---|
Photon 다섯 째날 (RPC로 OnDamage, RPC.애니메이션(상태머신), RPC.총,Connection Scene UI 꾸미기) (1) | 2022.09.13 |
Photon 넷째 날 (Photon View, OnPhotonSerializeView, RPC) (0) | 2022.09.12 |
Photon 셋째 날(PlayerFire , PlayerMove.OnDamage()) (0) | 2022.09.07 |
Photon 둘째 날 (PlayerMove, PlayerRot) (0) | 2022.09.06 |