Match Exception 질문입니다.

문의를 남기실 경우 다음 항목을 작성해 주시면 빠른 답변 처리에 도움이 됩니다.

  • 프로젝트명 : BattleFlex
  • 뒤끝SDK 버전 : 5.4.0
  • 에러 코드 :
    Match OnException : Object reference not set to an instance of an object
    SDK 를 업데이트 하고 유저와 매치시에 항상 위와같은 에러가 나옵니다.
    게임이 진행될때도 있고 도중에 연결이 끊길때도 있는데 이 에러에 대한 정보가 없네요
    어떤건지 알수 있을까요?

안녕하세요. 개발자님

해당 오류는 클라이언트에서 발생한 오류로 추정됩니다.
(등록하신 핸들러 코드 내부에서 오류가 발생했지만 오류 출력은 OnException에서 발생합니다)

오브젝트의 접근이 불가하여 에러가 발생한 것으로 추정되므로, 매칭 핸들러내에 작성하신 코드중에 클라이언트에서 해당 부분으로 에러가 발생한만한 원인이 있는지 확인해주시면 감사하겠습니다.

5.0.0쓸때는 문제가 없었는데
혹시 초기화 하면서 쓰레드에서 문제가 생길 수 있나요?

var bro = Backend.Initialize(true);

이렇게 초기화 하고있긴한데

5.0.0에서는 나오지 않던 에러거든요
코드를 바꾼적도 없고요…

Initialize(true)일 경우에는 콜백 함수 풀링을 지속적으로 호출해주셔야 합니다.

Update문에 주기적으로 호출될 수 있도록 Backend.AsyncPoll();을 작성해주시기 바랍니다.

초기화 및 쓰레드 또는 콜백 함수 풀링에 관련해서는 해당 문서를 참고해주시면 감사하겠습니다.

Backend.AsyncPoll();
풀링은 하고있습니다.
Active를 항상 유지하고 있는 MonoBehaviour 객체에서 Update 함수 내에 위치하고 있어요

문의 주신 후 Unity 2020.1.3f1 / Backend-5.4.0 환경과,

윈도우 유니티 에디터, iOS 환경에서 뒤끝매치 테스트를 진행해보았는데,

별다른 특이사항은 확인할 수 없었습니다.
(모든 함수가 정상적으로 작동하는 것을 확인하였습니다.)

동기 방식의 초기화를 사용하시는 경우 초기화 할 때 메인 쓰레드 상에서만 동작하고,

뒤끝 매치의 경우에도 모든 로직이 뒤끝 매치에서 동작하게 됩니다.

또한 5.2.0 버전 이후 뒤끝매치의 변경사항 또한 존재하지 않아 어떤 부분에서 에러를 겪고 계신지 좀 더 확인이 필요할 것 같은데요,

접근에 실패하는 객체가 무엇인지, 어떤 이벤트가 호출될 때 해당 예외가 발생하는지 확인 부탁드리겠습니다.

Backend.Match.OnMatchRelay 이벤트가 원인이네요
5.0.0에서는 useAsyncPoll 을 따로 지정하지 않고 쓰는 경우였는데
Backend.Match.OnMatchRelay 안에서 unity 객체에 접근이 가능했는데
5.4.0에서는 OnMatchRelay 이벤트 안에서 unity 객체에 접근하려고 하면 OnException 에러가 호출됩니다.

5.4.0 으로 SDK를 바꾸면서
var bro = Backend.Initialize(true);
useAsyncPoll 을 true 로 호출했고
Backend.AsyncPoll(); 도 update 함수 안에서 돌리고 있는데
이벤트마다 메인쓰레드에 접근 가능하지 않은 이벤트들이 있는건가요?

자답입니다. sdk 변경하고 sendqueue 로 함수를 변경하면서 호출순서가 변경되서 나는 에러였네요…