유니티 Robots 프로젝트 - 매치메이킹 구현 #1

반응형

매치메이킹 구현

브롤스타즈 매칭 시스템을 보면 위와 같이 매치메이킹인 것을 볼 수 있다.

 

브롤스타즈는 비슷한 실력자들 끼리 랜덤매칭이 되겠지만 우선 그것은 후에 고려해야 할 사항이기 때문에 아래 조건에 맞게 매치메이킹을 구성해 보았다.

 

조건

1. 실시간으로 몇명 매칭중인지 UI로 표시하기

2. 매칭중에 나간 경우 UI에도 반영하기 

3. 플레이어 수 꽉차면 게임 시작 씬으로 변경

4. 모든 클라이언트가 동일한 타이밍에 게임 시작하기.

 

 

1. 실시간으로 몇명 매칭중인지 UI로 표시하기

그냥 Text 컴포넌트 하나 추가했다..

 

Sample 씬에 게임오브젝트 하나 만들어놨는데 거기에 MatchMakingManager라는 이름의 스크립트를 하나 만들었고 PlayerCountText로 연결시켰다. UI는 연결시켰으니 끝이다.

 

 

그냥 일단은 하드코딩으로 MyGameRoom 이라는 세션이름의 방으로 들어가는 로직이다. 실제 보는 화면은 방 참가가 아니지만 로직상으로는 방에 이미 참가한듯 

 

 

그래서 방에 참가하면 OnPlayerJoined 메서드가 자동으로 호출되기 때문에 내가 참가한 시점에 방에 몇명이 있늕 ㅣ체크하고 그 인원을 UI에 표시했다 물론 ONPlayerJOined는 모든 클라에서 반응하기 때문에 동기화 할것도 없다 다른 클라가 내방에 들어오면 호출되는 것이라..

 

아무튼 그러고 방인원이 충족하면 씬이 바뀌는데 마스터 클라만 아래와 같이 로드씬 하면 됨 문서도 참고 ... 나머지 클라는 자동으로 씬 바뀌는듯 

https://doc.photonengine.com/fusion/current/manual/scene-loading

 

Fusion 2 Scene Loading | Photon Engine

Fusion internally contains no Unity Scene handling implementations, but it does provide an INetworkSceneManager interface, where you can define how Fu

doc.photonengine.com

 

 

자 3번도 끝났고 마지막으로 동시에 게임을 시작하는 로직만 구현하면 된다

 

일단 스크립트를 새로 만들었다

 

이 스크립트에서 해야할 것은 모든 클라에게 동일한 시점에 게임을 시작하게 하는 것

그럴려면 우리 모두가 약속된 시점에 뭔가가 되도록 해야하는게 그게 바로 Tick 이다 예를들어 3초 뒤에 전 세계의 불이 꺼졌으면 좋겠어 라고 생각한다면 한국시간 기준으로 3초 뒤잖아? 그게 TickTimer 이다 

 

그래서 아래와 같이 약속된 시간을 createfromseconds 을 이용해서 만들고 gamestarTime에 넣으면 [network] 변수로 인해 모든 클라에 동기화가 되는데 모든 클라에서는 동기화 된 gameStartTimer 값만 가지고 Expired 하면 우리가 약속한 시간에 뭔갈 할 수 있게 된다 약속을 지켯다느니.. 

 

 

매치메이킹 및 카운트 다운 비스무리한 기능 구현 완료 

 

 

 

참고 문서 

https://doc.photonengine.com/ko-kr/fusion/current/manual/fusion-types/ticktimer

반응형