서버 브라우저
이 SDK는 Unity 사용자를 위한 선택적 스타터 키트로, 나중에 확장하고 사용자 지정할 수 있습니다.
💡 기능
SDK를 설치하면 미리 구축된 자동화 기능을 사용할 수 있습니다:
완전한 예제
수명 주기 관리
용량 관리
필터 쿼리 컴파일러
타입 정의(C#)
로컬 개발 테스트
크로스 플랫폼
손쉬운 사용자 지정
자동 재시도
✔️ 준비
Unity SDK에는 배포, 매치메이킹, 서버 브라우저를 위한 선택적 통합 유틸리티가 포함되어 있습니다. 이 플러그인은 Unity 2021.3.0f1 및 이후 버전을 공식 지원합니다.
이 플러그인은 무료 티어의 이용 약관에 따라 100% 무료로 제공됩니다.
요구 사항
설치
Unity 프로젝트를 여세요,
다음을 선택하세요
Window > 패키지 관리 > 패키지 관리자,다음을 클릭하세요 ➕ 아이콘을 선택한 다음
git URL에서 패키지 추가...,안내가 표시되면 SDK URL을 입력하세요:
클릭하세요
추가을 누르고 설치가 완료될 때까지 기다리세요.
샘플 가져오기
이 패키지에는 여러 샘플이 포함되어 있으며, 각각 개별적으로 사용하도록 되어 있습니다(샘플을 결합하지 마세요).
검증된 출처
이곳은 이 SDK의 유일한 공식 배포 채널입니다. 검증되지 않은 출처를 믿지 마세요!
패키지 업데이트
Unity 패키지 관리자에서 Edgegap SDK로 이동한 다음 클릭하세요 업데이트 .
가져온 샘플은 자동으로 업데이트되지 않습니다! 사용자 지정 속성 값은 백업하고, 현재 씬에서 사용 중인 샘플 스크립트를 삭제한 다음 샘플을 다시 가져오세요.
v3로 업데이트
이번 업데이트에는 많은 새로운 서버 브라우저 유틸리티와 예제가 포함되어 있으며, 매치메이킹 오류 처리가 개선되는 등 여러 가지가 향상되었습니다. 자세한 내용은 릴리스 노트 에서 전체 목록을 확인하세요.
Unity SDK v3 업데이트에는 몇 가지 호환성을 깨는 변경 사항이 포함되어 있습니다. 통합을 주의 깊게 다시 테스트해 주세요.
🍀 시작하기
이 가이드는 다음에 대한 기본 지식과 서버 브라우저 개념, 그리고 실행 중인 Server Browser가 있다고 가정합니다.
문서를 읽으면서 코드 흐름을 따라갈 수 있도록 Auto-Assign Example을 가져오는 것을 강력히 권장합니다. 이 작업은 Unity Package Manager > Edgegap SDK > Samples .
개요
우리 SDK는 이를 적극적으로 활용합니다 의존성 주입 및 옵저버 프로그래밍 패턴.
이 패키지에는 다음이 포함됩니다:
런타임 파일 - 클라이언트 및 서버 빌드로 컴파일되어 번들됩니다:
서비스별 DTO - Server Browser API를 위한 타입이 지정된 데이터 컨테이너.
공유 유틸리티 - 로깅, HTTP, ping, observable 등...
공유 DTO - 여러 Edgegap 서비스에서 데이터를 전달하는 데 사용됩니다.
서버 에이전트
서버 수명 주기 및 용량 관리는 서버 에이전트가 수행합니다.
인스턴스화되면 에이전트의 상위 Monobehaviour(핸들러)는 에이전트를 초기화해야 하며 다음을 제공해야 합니다:
onMonitorUpdate콜백 - 서비스 상태 변경을 관찰합니다.onInstanceUpdate콜백 - 인스턴스 및 슬롯 변경을 관찰하고 반응합니다.onConfirmationsUpdate콜백 - 연합 인증을 관찰하고 반응합니다.
초기화되면 이 에이전트는 자동으로 검증을 제공하고 로깅 옵저버를 연결하며, 서비스 상태를 나타내기 위해 모니터링 API 엔드포인트를 한 번 호출하는 것으로 마무리합니다.
이 시점부터 에이전트의 핸들러가 제어권을 가져가 에이전트 함수를 호출해야 합니다:
DiscoverInstance초기 서버 인스턴스와 슬롯을 생성하고 하트비트를 시작하기 위해.DeleteInstance경기가 종료되면 / 새로운 플레이어의 참여를 방지하기 위해.ConfirmReservation플레이어가 참여할 때, 그들의 신원과 슬롯 할당을 확인하기 위해.UpdateSlot슬롯 용량을 업데이트하거나(플레이어 참여/이탈 시) 메타데이터를 수정하기 위해.UpdateInstance인스턴스 메타데이터를 수정하기 위해.StatusServer Browser 서비스 상태를 확인하기 위해.
확인 및 슬롯/인스턴스 업데이트는 기본적으로 대기열에 추가되어 배치로 수행됩니다 (하트비트 모드) 확장성을 극대화하기 위해. 개발 테스트 중 더 빠르게 반복하려면 Greedy Mode를 사용하세요.
메타데이터를 업데이트할 때는 모든 인덱스를 정의해야 합니다. 인덱싱되지 않은 키를 해제하려면 해당 키를 생략하면 됩니다.
에이전트는 실행 중인 서버를 검색 가능하게 유지하기 위해 자동으로 하트비트를 유지합니다. 에이전트가 연속된 여러 하트비트 동안(구성 가능) 서버 브라우저에 도달할 수 없으면:
최대 미만 - 인스턴스가 자동으로 다시 검색됩니다,
최대 초과 - 인스턴스가 자동으로 삭제됩니다.
새 플레이어 연결이 설정되면, 플레이어는 예약 확인을 수행하기 위해 네트코드를 사용하여 예약 ID(제3자 플레이어 ID)를 게임 서버로 보내야 합니다.
한 번 onConfirmationsUpdate 이 트리거되면 핸들러는 추가 작업을 수행해야 합니다:
호출
UpdateSlot확인된 예약이 있는 모든 슬롯의 사용 가능 좌석 수를 줄이기 위해,네트코드별 메서드를 사용하여 연결을 허용하거나 거부합니다.
플레이어가 게임을 이탈하면, 핸들러는 이 슬롯의 사용 가능 좌석 수를 늘려야 합니다.
클라이언트 에이전트
인스턴스 검색, 페이지네이션, 필터링 및 예약은 클라이언트 에이전트가 수행합니다.
인스턴스화되면 에이전트의 상위 Monobehaviour(핸들러)는 에이전트를 초기화해야 하며 다음을 제공해야 합니다:
onMonitorUpdate콜백 - 서비스 상태 변경을 관찰합니다.onInstancesUpdate콜백 - 인스턴스 목록 변경을 관찰하고 반응합니다.
초기화되면 이 에이전트는 자동으로 검증을 제공하고 로깅 옵저버를 연결하며, 서비스 상태를 나타내기 위해 모니터링 API 엔드포인트를 한 번 호출하는 것으로 마무리합니다.
이 시점부터 에이전트의 핸들러가 제어권을 가져가 에이전트 함수를 호출해야 합니다:
ReserveSeats특정 인스턴스/슬롯 또는 자동 할당에 대한 용량 예약을 생성하기 위해.ListInstances특정 필터, 정렬, 커서 및 페이지 크기를 사용하여 인스턴스 목록을 가져오기 위해.GetNextPage현재 매개변수(필터 등)로 더 많은 인스턴스를 가져오기 위해.RefreshList캐시를 지우고 첫 페이지를 다시 로드하거나 특정 커서로 새로 고치기 위해.GetInstanceDetails특정 인스턴스의 인스턴스 메타데이터 및 슬롯 정보를 가져오기 위해.StatusServer Browser 서비스 상태를 확인하기 위해.
새 플레이어 연결이 설정되면, 플레이어는 예약 확인을 수행하기 위해 네트코드를 사용하여 예약 ID(제3자 플레이어 ID)를 게임 서버로 보내야 합니다.
예상치 못한 충돌이 발생했을 때 다시 연결할 수 있도록 클라이언트 또는 게임 백엔드에 연결 세부 정보를 저장하세요.
🧪 샘플
서버와 클라이언트 모두에 대해 완전하고 동작하는 통합을 포함한 샘플로 시작하세요.
자동 할당
클라이언트가 정책 이름만 지정하는 자동 할당 예약을 사용합니다. 서버 브라우저는 정책 필터와 충분한 좌석이 있는 슬롯에 맞는 인스턴스를 자동으로 선택합니다.
사용자 지정 검색
인스턴스와 슬롯을 검색하는 방법, UI 요소를 연결하는 방법, 그리고 플레이어가 수동으로 용량을 예약할 위치를 선택하게 하는 방법을 보여주는 전체 구현이 포함됩니다.
⚙️ 사용자 지정
이 SDK는 확장 및 수정이 가능하도록 설계되었지만, 일부 수정은 위험할 수 있습니다:
✅ 핸들러 - UI 옵저버를 안전하게 연결하고 약간의 추가 또는 수정을 수행,
⚠️ 에이전트 - 수명 주기 및 용량 관리는 본인의 책임 하에 수정,
⚠️ API - 선별한 유틸리티만 사용하여 처음부터 직접 통합을 작성.
핸들러는 아래 설명에 따라 서버 및 클라이언트 에이전트가 내보내는 모든 이벤트를 관찰할 수 있습니다.
다음에 익숙해지도록 하세요 Server Browser 심층 사용자 지정 전에 개념을 익히세요.
서버 이벤트
서버 에이전트는 상위 핸들러가 관찰하고 처리할 수 있도록 이벤트(액션)를 내보냅니다.
액세스하여 이벤트 페이로드를 읽습니다 .Current 모든 관찰 가능한 것의 상태. 🔴 오류 이벤트에는 주요 이벤트 메시지 뒤에 줄바꿈 문자로 구분된 전체 오류 메시지가 포함됩니다.
observable이 내보내는 미리 보기 이벤트 모니터 :
🟢 업데이트
정상
모든 시스템이 정상입니다.
🟢 업데이트
비정상
예상치 못한 문제입니다.
🔴 오류
모니터 가져오기에 실패했습니다
잘못된 구성 또는 예상치 못한 문제입니다.
🟡 경고
요청 타임아웃이 하트비트 [{timeout}]로 고정되었습니다
경합 상태를 방지합니다.
observable이 내보내는 미리 보기 이벤트(액션) 인스턴스:
🔴 오류
검색 중복
이 요청 ID를 가진 인스턴스는 이미 검색되었습니다.
🔴 오류
검색 실패
검색 중 예상치 못한 문제가 발생했습니다.
🔵 알림
하트비트 정상
하트비트가 정상적으로 완료되었습니다.
🟡 경고
하트비트 실패 [{consecutive}/{maximum}]
하트비트 실패, 서버가 Server Browser에 연결할 수 없습니다.
🔵 알림
인스턴스 업데이트가 대기열에 추가됨
다음 배치(하트비트/그리디)를 위해 인스턴스 업데이트가 대기열에 추가되었습니다.
🟢 업데이트
인스턴스가 업데이트됨
인스턴스 메타데이터가 정상적으로 업데이트되었습니다.
🔴 오류
인스턴스 업데이트 실패, 재시도 대기열에 추가 중
요율 제한 또는 오류로 인해 인스턴스 업데이트에 실패했습니다.
🟢 업데이트
인스턴스가 삭제됨
이제 플레이어가 인스턴스를 검색할 수 없습니다.
🟢 업데이트
인스턴스 삭제 실패(찾을 수 없음)
너무 많은 하트비트 누락으로 인스턴스가 만료되었을 수 있습니다.
🔴 오류
인스턴스 삭제 실패
요율 제한 또는 오류로 인해 인스턴스를 삭제하지 못했습니다.
🔵 알림
슬롯 업데이트가 대기열에 추가됨 [{slot}]
다음 배치(하트비트/그리디)를 위해 슬롯 업데이트가 대기열에 추가되었습니다.
🟢 업데이트
슬롯이 업데이트됨 [{slot}]
슬롯 좌석 용량 및/또는 메타데이터가 정상적으로 업데이트되었습니다.
🟡 경고
에이전트가 동시 슬롯 업데이트를 제한함
동시 업데이트 시도를 방지했습니다(경합 상태).
🔴 오류
슬롯 업데이트 실패(찾을 수 없음) [{slot}]
이 이름의 슬롯은 아직 이 인스턴스에 정의되어 있지 않습니다.
🔴 오류
슬롯 업데이트 실패(좌석 부족) [{slot}]
슬롯 업데이트에서 사용 가능한 좌석 수를 0 미만으로 줄이려고 했습니다.
🔴 오류
슬롯 업데이트 실패, 재시도 대기열에 추가 중 [{slot}]
요율 제한 또는 오류로 인해 슬롯 업데이트에 실패했습니다.
observable이 내보내는 미리 보기 이벤트(액션) 확인:
🔵 알림
대기열에 추가됨 [{player}]
다음 배치(하트비트/그리디)를 위해 확인이 대기열에 추가되었습니다.
🟡 경고
중복 [{player}]
중복 확인 시도를 방지했습니다(이미 대기열에 있음).
🟢 업데이트
확인됨
개별 슬롯에 대해 확인된 예약입니다. 핸들러가 해결(허용/차단)해야 하는 만료되었거나 알 수 없는 플레이어 ID도 포함됩니다.
🔴 오류
실패
확인 중 예상치 못한 문제가 발생했습니다. 서비스 상태를 확인하세요.
클라이언트 이벤트
클라이언트 에이전트는 상위 핸들러가 관찰하고 처리할 수 있도록 이벤트(액션)를 내보냅니다.
액세스하여 이벤트 페이로드를 읽습니다 .Current 모든 관찰 가능한 것의 상태. 🔴 오류 이벤트에는 주요 이벤트 메시지 뒤에 줄바꿈 문자로 구분된 전체 오류 메시지가 포함됩니다.
observable이 내보내는 미리 보기 이벤트 모니터 :
🟢 업데이트
정상
모든 시스템이 정상입니다.
🟢 업데이트
비정상
예상치 못한 문제입니다.
🔴 오류
모니터 가져오기에 실패했습니다
잘못된 구성 또는 예상치 못한 문제입니다.
observable이 내보내는 미리 보기 이벤트 인스턴스:
🔵 알림
좌석 예약됨
좌석 예약이 정상적으로 완료되었습니다.
🔴 오류
좌석 예약 실패
잘못된 정책, 요청 ID 또는 슬롯 ID 때문일 수 있어 좌석 예약에 실패했습니다.
🟢 업데이트
인스턴스 목록이 검색됨
인스턴스 목록을 정상적으로 가져왔습니다.
🟢 업데이트
인스턴스 목록 다음 페이지가 검색됨
인스턴스의 다음 페이지를 정상적으로 가져왔습니다.
🔴 오류
인스턴스 목록 마지막 페이지에 도달함
다음 페이지 가져오기에 실패했습니다. 새로 고치거나 필터를 변경해 보세요.
🔴 오류
인스턴스 목록 다음 페이지 가져오기에 실패함
다음 페이지 가져오기에 실패했습니다. 유효하지 않은 커서 때문일 수 있습니다.
🟢 업데이트
인스턴스 세부 정보가 검색됨
목록에 있는 인스턴스의 세부 정보를 정상적으로 가져왔습니다.
🟢 업데이트
인스턴스가 캐시에 없어서 앞에 추가함
현재 목록 밖의 인스턴스 세부 정보를 가져왔습니다.
🔴 오류
인스턴스 세부 정보 가져오기 실패
잘못된 요청 ID 때문일 수 있어 세부 정보를 가져오지 못했습니다.
마지막 업데이트
도움이 되었나요?

