매치 문의 드립니다.

현재 디펜스류 PVP게임을 만들고 있습니다.

현재 매칭해서 플레이어의 정보들을 화면에 띄우는거 까지는 성공했는데
제가 잘못이해했는지 모르겠지만

제가 잘못이해한건지 모르겠는데.
Backend.Match.OnMatchInGameStart() += {
// TODO
}
이게 게임 시작 후 15초 후에 신호를 준다던데
씬이 열리자 마자 호출이됩니다.

플레이어가 씬에 돌입 후 로딩에 따라 먼저 씬에 도달하는 시간이 달라 이것의 싱크를 맞추고 싶어서 대기시간을 15초 준다길래 해봤는데 다른방법 없을까요? 아님 제가 잘못하는건가요.

그리고 만약에 신호를 동시에 줘서 몬스터가 처음에는 동일하게 나오는데 한쪽플레이어가
홈으로 나가거나 하면 게임이 멈춰서 몬스터의 싱크가 달라집니다. 이런건 어떻게 맞춰야하나요?
그리고 한쪽이 강제로 게임을 종료하고 일정시간동안 신호를 못받으면 자동으로 패배처리를 하고 싶은데

밑에 글 읽어보니 나간사람이 다시 접속해야 결과가 반영된다고 하던데 이점을 어떻게 못할까요?

감사합니다~

  • 프로젝트명 :
  • 뒤끝SDK 버전 :
  • 에러 코드 :

안녕하세요

OnMatchInGameStart 메시지의 경우

업데이트 전에는 15초로 고정이었지만, SDK 4.6.0 이후 버전에서는 콘솔에서 설정한 시간 후에 호출이 됩니다.

아래 이미지를 참고하여 매치 카드에서 매치 시작 대기 시간을 조절해보세요.

혹시 시간이 가는 기준이 언제인가요?

제가 방식이

매칭성공 - 로딩씬 - 배틀씬입니다.
보니깐 3초로 설정돼있는데 씬 열리자마자 열리더라고요!
매칭된 기준인가요?

모든 유저가 게임방에 접속한 이후 기준입니다.

개발자님 같은 경우

매칭 성공 - 유저들이 게임방에 입장 - 모든 유저가 방에 입장 완료 - 3초 - 게임 시작 메시지
순으로 이벤트가 발생하게 됩니다.

이상하네여 바로했던거 같은데 다시 한번 봐보겠습니다.

그런데 제가 예제를 기준으로 만들고 있는데

Backend.Match.OnMatchInGameStart() += {
// TODO
}

저 TODO 부분에 몬스터 소환 함수를 넣으면
대기 초 이후 소환되는건가요?

제가 코드를 봤는데 예제코드는 INGAME 씬으로 변경을하더라고요.

OnMatchInGameStart 호출 이후부터는

개발자님 재량으로 여러가지 작업을 하시면 됩니다.

논리적으로는 뒤끝매치서버에서의 게임시작이나

해당 이벤트가 호출 전 후로

씬 로딩, 리소스 로딩, AI 설정 등의 작업과 내부적인 게임 시작 등을 수행하셔도 됩니다.

예제 게임 기준으로는

OnMatchInGameStart이 호출되었을 때

InGame씬을 호출하고, 인게임 씬이 로딩되었을 때 마스터 클라이언트에서 카운트 다운 메시지와 게임 시작 메시지를 서버로 전송합니다.

예제게임에서 게임 시작 UI가 표시되는 것은 OnMatchInGameStart 함수와는 무관합니다.

또한

OnMatchInGameStart 함수 이후 몬스터 소환 함수를 넣으셔도 무방할 것 같습니다.

좀 더 자세히 말씀드리면

OnMatchInGameStart 이벤트를 기준으로

클라이언트 각각의 씬 로딩, 리소스 로딩 등은 OnMatchInGameStart 호출 전으로,

모든 클라이언트가 공유해야 할 정보 값이나, 클라이언트 들의 메시지, 클라이언트 들의 동기화 등은 OnMatchInGameStart 호출 후 처리되도록 프로세스를 작성하시면 될 것 같습니다.

다만 각 클라이언트는 모두 성능이 다를 것이고 그렇기에 씬 로딩, 리소스 로딩 등의 속도가 모두 다를 수 있습니다.

그렇기에 모든 처리가 OnMatchInGameStart 이후 처리되도록 하고 이때의 정보 (로딩 진행상황 등)을 각 클라이언트가 공유되도록 작성하셔도 될 것 같습니다.

OnMatchInGameStart 이벤트는 뒤끝매치에서 논리적으로

각 클라이언트에게 메시지를 브로드 캐스팅해도 된다는 이벤트 일 뿐이고,

실제 게임시작 메세지 등은 개발자님께서 별도로 제작하시는 것을 추천드립니다.

예제 게임에서도 실제 게임시작 메시지는 마스터 클라이언트에서 발생시키도록 제작되었습니다.

감사합니다!

질문이 몇가지 더 있습니다 ㅠㅠ 한쪽이 일방적으로 서버와의 연결을 끊었을 때 패배처리를 하고 싶습니다.
한마디로 재접속 기능을 사용하지 않을려고 합니다.
이점은 어떤 방법으로 만들어야 할까요?

그리고 상대방과 몬스터의 위치 씽크를 어떤식으로 맞추는게 좋을까요

예로들어 1:1 격투게임이면 움직일때 서로의 위치를 공유하면되는데

AI가 있을 경우 AI의 위치를 계속 보내야하나 생각합니다.

매칭 도중 유저가 나갔고, 유저가 재접속 하지 않은 경우에는

어뷰징 등의 행위를 방지하기 위해 해당게임의 결과는 무효처리 시키고 있습니다.

철권 같이 유저가 게임 도중 나간 경우 게임이 무효되는 것을 생각하시면 이해하기 편하실 것 같습니다.

AI 의 경우 계속 위치를 보내기 보다는 위치의 변화가 있을 경우 해당 AI의 위치를 서버로 전송하고, 브로드캐스팅 된 해당 AI의 위치를 각 클라이언트에서 적용하시면 될 것 같습니다.

상세한 답변 감사합니다.

반대로 질거같을때 나가버리면 무효처리가 되는걸 알고있다면 점수방어와 패배처리를 하지 않기 위해
지는 상황이 나올때 나가서 무효로 만든다면 이부분은 이슈가될거같습니다.
따로 콘솔 설정을 통해 변경이 불가능할까요?

몬스터의 위치는 말그대로 디펜스 게임이라 계속 혼자 정해진 길을 갑니다. 그래서 실시간으로 계속 전송이 될거같은데 이부분이 문제가 될까요?

아님 방장기준으로 보이는 몬스터의 위치를 일정시간마다 알맞게 변경하는 방법도 이론적으로 가능한 부분인지 알고싶습니다.

안녕하세요.

현재는 게임 자체가 무효 처리 되지만, 추후에 콘솔 옵션을 통하여 게임 종료를 한 유저는 해당 게임에서 무조건 패배 처리를 할 수 있는 옵션을 제공 해 드릴 예정입니다.

감사합니다.