For the complete documentation index, see llms.txt. This page is also available as Markdown.

유니티 - 시작하기

직접 해보며 배우고 Edgegap에서 첫 전용 서버를 배포해 보세요. 이 가이드가 끝나면 비용 없이 Edgegap으로 전용 서버를 배포하게 됩니다.

✔️ 준비

시작하기 전에, 반드시 Edgegap에서 무료 계정을 생성하세요 (신용카드 정보는 필요하지 않습니다). 다음을 할 수 있습니다 그 후 팀원을 초대할 수 있습니다, 아직 Edgegap 계정이 없어도 됩니다.

개발 환경에서 몇 가지 필수 항목을 구성하세요:

Unity Linux 빌드 지원 모듈 설치
  • Unity Hub를 사용하여 탭 선택 설치합니다, 액세스 설정 지역화된 인터넷 서비스 제공업체(ISP)가 일시적으로 사고를 해결하고 있을 수 있습니다, 모듈 추가 Edgegap 플랫폼에서 사용하려는 각 Unity 버전에 대해:

  • 아래로 스크롤하여 다음 Unity 모듈을 선택하고 설치하세요:

    • Linux 빌드 지원 (IL2CPP),

      • Linux 빌드 지원 (Mono),

      • Linux 전용 서버 빌드 지원

Docker Desktop(또는 Docker CLI) 설치
Edgegap의 Unity 전용 서버 퀵스타트 플러그인 설치

참조해 주세요 공식 플러그인 저장소 설치에 대한 자세한 안내는

이 플러그인은 테스트되었으며, 모든 LTS 릴리스를 포함하여 Unity 2021.2+, Unity 2023 및 Unity 6 버전을 지원합니다.

서버 빌드에 자신 있으신가요? 다음으로 이동 Unity 또는 고급 기능 에서 더 알아보세요.

⚙️ 1. 계정 연결

☑️ 로그인하고 Unity 콘솔에 Edgegap 플러그인과 관련된 새로운 오류가 없는지 확인하세요.

✅ 이제 다음 단계로 진행할 수 있습니다.

문제 해결 및 FAQ

!성공: 400 BAD REQUEST - POST | https://api.edgegap.com/v1/wizard/init-quick-start - {"message": "브라우저(또는 프록시)가 이 서버가 이해할 수 없는 요청을 보냈습니다."}

  • ZIP 파일을 복사하여 설치했거나 이런 방식으로 플러그인이 설치된 샘플 프로젝트를 사용했다면 Newtonsoft JSON 라이브러리를 포함한 패키지 종속성을 수동으로 설치해야 합니다. 다음을 참조하세요 공식 플러그인 저장소.

  • 다음에서 문의해 주세요 커뮤니티 디스코드 해당되지 않는다면 도움을 요청하세요.

🔧 2. 게임 서버 빌드

Windows, Mac 또는 Linux 머신을 사용하든, 서버를 Linux 런타임용으로 빌드해야 합니다. 요즘 대부분의 클라우드 제공업체(Edgegap 포함)는 Linux에서 실행되기 때문입니다. 걱정하지 마세요. 이 플러그인을 사용하면 Linux 지식이 없어도 됩니다.

☑️ 필요한 Unity Linux 빌드 도구가 설치되었는지 확인하세요.

Unity Linux 빌드 지원 모듈 설치
  • Unity Hub를 사용하여 탭 선택 설치합니다, 액세스 설정 지역화된 인터넷 서비스 제공업체(ISP)가 일시적으로 사고를 해결하고 있을 수 있습니다, 모듈 추가 Edgegap 플랫폼에서 사용하려는 각 Unity 버전에 대해:

  • 아래로 스크롤하여 다음 Unity 모듈을 선택하고 설치하세요:

    • Linux 빌드 지원 (IL2CPP),

      • Linux 빌드 지원 (Mono),

      • Linux 전용 서버 빌드 지원

☑️ 빌드 설정을 편집하여 필요한 모든 게임 씬이 포함되어 있는지 확인하세요.

고급 Unity 사용자분들은 선택적으로 Unity 빌드 설정. 주의! 이로 인해 빌드가 깨질 수 있습니다.

☑️ 선택 사항: Edgegap Server Hosting 메뉴에서 초기 서버 씬에 포트 검증 및 환경 부트스트래핑용 netcode 전용 스크립트를 추가하세요(하이어라키 창에서 우클릭 / 하이어라키 창).

단계를 완료하면 Unity포트 검증 스크립트가 netcode 주소나 포트가 Edgegap 앱 버전 포트 매핑 구성과 일치하지 않을 경우 경고를 기록합니다.

☑️ 설정이 마음에 들면 서버 빌드, 프로세스가 끝날 때까지 기다린 후 Unity 콘솔에 새로운 오류가 없는지 확인하세요. 이 단계를 완료하면 프로젝트 루트에 새 폴더가 생성됩니다 - Builds/EdgegapServer/ServerBuild .

✅ 이제 다음 단계로 진행할 수 있습니다.

문제 해결 및 FAQ

Unity: 지원되는 독립 실행형 타깃은 OpenXR이 있는 Windows x64와 OSX뿐입니다.

  • 서버를 빌드하기 전에 패키지를 열고 OpenXR을 비활성화하세요.

  • OpenXR 플러그인은 클라이언트에만 필요하며 Linux 서버 빌드와 호환되지 않습니다. 서버 빌드에서 제외해도 어떤 기능도 잃지 않습니다.

🐋 3. 서버 컨테이너화

개발자 팀과 함께 작업하면 코드를 공유해야 합니다. 문제가 발생했을 때 듣고 싶은 마지막 말은 “내 환경에서는 잘 돼”일 것입니다. 게임 서버는 전 세계 수천 대의 서버 머신에서 안정적으로 실행되어야 합니다.

서버를 안정적으로 만들기 위해 Docker를 사용합니다 - 운영 체제 수준까지 서버 코드의 모든 종속성이 어디서 어떻게 서버가 시작되든 항상 정확히 동일하도록 보장하는 가상화 소프트웨어입니다.

시청을 권장합니다 "로컬에 설치하지 마세요" (비디오). Docker를 사용할 때 Dockerhub를 사용할 필요는 없습니다Docker ≠ Dockerhub. Docker를 프로그래밍 엔진으로 보고 Dockerhub를 앱 스토어로 생각하세요.

☑️ 먼저 검증 버튼을 눌러 다음을 완료했는지 확인하세요 Unity.

Docker Desktop(또는 Docker CLI) 설치

☑️ 다음 옵션을 구성할 수 있습니다(또는 기본값을 유지하세요):

  • 빌드 경로 는 서버 빌드 아티팩트에 대한 상대 경로입니다. 일단 기본값을 유지합시다.

  • 이미지 이름 은(는) 배포 전에 서버 빌드를 식별하는, 원하는 고유 식별자입니다.

    • 보통 이는 게임 이름을 포함합니다. 예: “my-game-server”.

  • 이미지 태그 는 이미지의 특정 버전을 가리키는 식별자입니다.

    • “build artifact”라는 용어는 때때로 이미지의 특정 버전을 가리킬 때 사용됩니다.

    • 타임스탬프는 태그에 좋은 기본 옵션입니다. 예: 2024.01.30-16.23.00-UTC .

  • Dockerfile 경로 는 이미지 레시피를 사용자 지정하는 데 사용할 수 있습니다.

    • 지금은 기본 설정을 유지하길 권장합니다. 자세한 내용은 나중에 다음 섹션에서 읽어볼 수 있습니다. Unity.

  • 선택적 Docker 빌드 매개변수 는 Docker에 더 세부적인 사항을 추가로 지시하는 데 사용할 수 있습니다.

☑️ 설정이 마음에 들면 Docker로 컨테이너화, 프로세스가 끝날 때까지 기다린 후 Unity 콘솔에 새로운 오류가 없는지 확인하세요. 이 단계를 완료하면 로컬 머신에 새 이미지가 나타납니다. 이는 Docker Desktop의 Local(기본값) 아래 Images 탭에서 확인하거나, docker CLI에서 다음을 실행해 확인할 수 있습니다. docker images .

소스에서 다시 빌드 자동으로 빌드하고 컨테이너화하여 다음 빌드 속도를 높이기 위해.

✅ 이제 다음 단계로 진행할 수 있습니다.

문제 해결 및 FAQ

/bin/bash: docker: 명령을 찾을 수 없음 , 또는 Packages\com.edgegap.unity-servers-plugin\Editor을(를) 찾을 수 없습니다

  • 먼저 다음을 완료했는지 확인하세요 개발자 도구.

  • Edgegap 계정 인증을 완료했는지 확인하세요. 이메일로 인증 링크를 받았어야 합니다.

  • Docker Desktop을 업데이트한 후 일부 설정이 초기화되었을 수 있습니다. Docker Desktop Settings / Advanced로 이동하여 “Choose how to configure the installation of Docker’s CLI tools:”에서 “System (requires password)”를 선택해 보세요.


docker build에는 정확히 1개의 인수가 필요합니다

  • 이미지 태그에 공백 문자(스페이스, 탭)가 포함되어 있지 않은지 확인하세요. 이미지 태그 값을 다시 입력하면 실수로 그런 문자를 복사하지 않았는지 확인할 수 있습니다.


(HTTP 코드 400) 예기치 않음 - 잘못된 태그 형식


ERROR: 해결 실패: ubuntu:22.04: http://docker.io/library/ubuntu:22.04의 소스 메타데이터를 확인하지 못해 해결에 실패했습니다: 인증에 실패했습니다: oauth 토큰을 가져오지 못했습니다

  • 중국에 계신가요? 만리방화벽으로 인해 연결이 끊길 수 있습니다. 다음을 실행해 보세요 docker pull ubuntu:22.04 명령줄에서 수동으로(명령줄을 열려면 Win+R을 누른 다음 다음을 입력하세요 cmd 를 입력하고 Enter).


System.IndexOutOfRangeException: 인덱스가 배열의 범위를 벗어났습니다.

  • ZIP을 다운로드하여 Unity 퀵스타트 플러그인을 설치했다면, Unity Editor 캐시가 손상되었을 수 있습니다. 플러그인 복사본을 삭제하고 git URL 또는 Unity Asset Store를 통해 설치해 보세요. 이제 Newtonsoft.JSON 패키지는 다른 소스와 함께 자동으로 포함되므로 더 이상 필요하지 않습니다.


내 Docker 이미지 크기가 엄청 큽니다(1GB 초과) / 너무 작습니다(100MB 미만), 괜찮은가요?

  • 서버를 실행하고 성공적으로 연결할 수 있다면(다음을 참조) 일부 경우에는 괜찮을 수 있습니다 Unity). 그렇지 않다면 빌드 옵션을 검토하고 기본값으로 초기화한 뒤, 옵션을 하나씩 추가하면서 빌드 크기에 어떤 영향을 미치는지 확인해 보세요. 또한 다음도 참고하세요 Unity.


이 문서 어디에도 언급되지 않은 다른 문제가 발생하고 있습니다.

🧪 4. 로컬에서 서버 테스트

업로드하고 배포하기 전에(약간의 시간이 걸릴 수 있음) 서버 이미지가 제대로 작동하는지 확인하기 위해 로컬(사용자 기기)에서 배포하고 게임 클라이언트를 연결해 보겠습니다.

☑️ 다음 옵션을 구성할 수 있습니다(또는 기본값을 유지하세요):

  • 서버 이미지 태그 이전 단계에서.

    • 기본값은 플러그인으로 마지막에 빌드한 태그입니다.

  • 선택적 Docker 실행 매개변수 는 여러 포트를 노출하거나 macOS 머신에서 이미지를 실행할 때 지정할 수 있습니다.

    • 필요하다면 컨테이너의 여러 포트를 게시할 수 있습니다. 단순히 다음 매개변수를 추가하세요 -p {internal port}/{protocol} 각각에 대해, 예를 들면 -p 8080/tcp -p 7777/udp 서버 포트를 게시하고 매핑하려면 8080 TCP 연결용 무작위 외부 포트와 서버 포트 7777 를 동시에 무작위 외부 포트에 매핑합니다. Transport 또는 netcode 전용 설정에서 서버 포트 구성을 찾으세요.

    • ARM 아키텍처 머신(macOS M1, M2, M3 등)을 사용 중이라면 선택적 Docker 빌드 매개변수에 다음 선택적 매개변수가 포함되어 있는 것을 확인해야 합니다: --platform=linux/amd64 .

☑️ 설정이 마음에 들면 로컬 컨테이너 배포, 프로세스가 끝날 때까지 기다린 후 Unity 콘솔에 새로운 오류가 없는지 확인하세요. 이 단계를 완료하면 새 컨테이너가 시작됩니다 개발 머신에서.

자세한 내용은 Docker Desktop / Containers 또는 Docker CLI 명령을 참조하세요 docker ps .

☑️ 이제 다음을 할 시간입니다 Unity Editor 게임 클라이언트를 로컬 Docker 컨테이너에 연결 하여 서버 이미지가 올바르게 작동하는지 확인하세요. netcode 클라이언트 설정을 찾아 다음을 입력하세요:

  • localhost 또는 0.0.0.0 (대부분의 경우 동일) 서버 IP 대신,

  • Docker Desktop / Containers / edgegap-server-test에서 확인되는 무작위 외부 포트 값.

☑️ 로컬 서버 컨테이너에 연결하여 문제없이 플레이할 수 있는지 확인한 후에는 기기의 리소스를 다른 프로그램용으로 확보하기 위해 컨테이너를 삭제할 수 있습니다 🗑️

✅ 이제 다음 단계로 진행할 수 있습니다.

문제 해결 및 FAQ

Unity Editor 게임 클라이언트를 사용해 로컬 Docker 컨테이너에 연결할 수 없습니다.

  • 먼저 컨테이너 상태가 Up이고 Restarting 또는 Exited가 아닌지 확인하세요. 이는 런타임 예외를 의미합니다. 컨테이너가 실행 중이 아니라면 Docker Desktop의 Containers 탭(컨테이너를 클릭)에서 로그를 확인하거나 다음을 사용하세요 docker logs {container_id} --timestamps 를 docker CLI로.

  • 다음으로, 서버 빌드의 Network Manager 포트 설정이 다음에 게시된 포트와 일치하는지 확인하세요 선택적 Docker 실행 매개변수. 일치하지 않으면, 이 입력 필드의 값을 재설정하거나 수동으로 변경하여 다음과 일치시키세요 {container} 포트를 Network Manager 설정에 맞추세요. netcode 설정에서 프로토콜을 찾으세요.

  • 마지막으로, Unity Editor 게임 클라이언트의 netcode 설정이 다음에 게시된 포트를 사용 중인지 확인하세요 선택적 Docker 실행 매개변수 (위 스크린샷 참조).


(세그멘테이션 폴트) - 코어 덤프됨

  • ARM 아키텍처 머신(macOS M1, M2, M3 등)을 사용 중이라면 선택적 Docker 빌드 매개변수에 다음 선택적 매개변수가 포함되어 있는 것을 확인해야 합니다: --platform=linux/amd64 . 그렇지 않다면 이 입력 필드의 값을 재설정해 보세요.


SceneObjects에서 9120233082191360994의 SceneId를 찾을 수 없습니다.

  • 이는 로드하려는 씬이 빌드에 올바르게 포함되지 않았음을 의미할 수 있으며, 이전 플러그인 버전의 알려진 문제입니다. 이를 해결하려면 netcode 통합 버전을 업데이트하거나 Edgegap 플러그인 업데이트.


http2: 서버: 클라이언트 //./pipe/docker_engine에서 preface를 읽는 중 오류 발생 // 파일이 이미 닫혔습니다


Curl 오류 35: 인증서 핸드셰이크 실패. 치명적 오류. UnityTls 오류 코드: 7

  • 이 오류는 루트 SSL 인증서 검증 문제를 나타내며, 이전 플러그인 버전의 알려진 문제입니다. 이를 해결하려면 다음을 시도해 보세요 Edgegap 플러그인 업데이트.

☁️ 5. Edgegap에 업로드

서버를 온라인으로 배포할 시간입니다! 이제 이미지가 플레이어를 성공적으로 호스팅할 수 있으므로 이를 Edgegap에 업로드하여 전 세계 어디에서나 실행할 수 있습니다. 이 가이드에서는 Edgegap의 컨테이너 레지스트리 (이미지 저장소).

☑️ 다음 옵션을 구성할 수 있습니다(또는 기본값을 유지하세요):

  • 애플리케이션 이름 Edgegap에서 이미지 이름과 일치하도록 하거나 사용자 지정할 수 있습니다.

    • 지금은 이미지 이름을 복사하도록 선택했습니다.

  • 서버 이미지 다음 단계에서 Unity.

☑️ 설정이 마음에 들면 이미지 업로드 및 앱 버전 생성, 프로세스가 끝날 때까지 기다린 후 Unity 콘솔에 새로운 오류가 없는지 확인하세요.

☑️ 다음으로 이동하게 됩니다 대시보드, 여기서 선택적 설정을 구성할 수 있습니다. 이 단계를 완료하면 새 애플리케이션 버전이 생성됩니다, 그리고 귀하의 빌드 아티팩트가 태그되어 Edgegap의 Container Registry에 업로드됩니다.

  • 애플리케이션 버전 Edgegap에서 태그와 일치하도록 하거나 사용자 지정할 수 있습니다.

    • 타임스탬프는 앱 버전 이름에 좋은 옵션입니다. 예: 2024.01.30-16.50.20-UTC .

    • 여러 애플리케이션 버전이 다음과 같은 동일한 이미지 태그를 가리킬 수 있습니다 v1.1.0dev .

    • 자세한 내용은 앱 및 버전 나중에 알아보세요.

☑️ 이제 새 애플리케이션 버전의 포트를 정의하라는 메시지가 표시됩니다. 다음 단계와 동일한 서버 포트 값으로 설정하세요 Unity Transport 또는 netcode 전용 설정에서.

✅ 이제 다음 단계로 진행할 수 있습니다.

문제 해결 및 FAQ

거부됨: 저장소 리소스 756.6 MiB를 추가하면 현재 사용량 4.3 GiB에서 업데이트될 때 구성된 상한 4.7 GiB를 초과합니다 , 참조 "layer-sha256:--------"에 대한 커밋에 실패했습니다: https://registry.edgegap.com/로의 PUT 요청에서 예기치 않은 상태가 반환되었습니다

  • 다음에서 이미지 저장 공간이 부족한 것 같습니다 컨테이너 레지스트리. 사용하지 않는 빌드 아티팩트(있는 경우)를 제거하거나 서버 빌드 크기를 최적화하는 것을 고려하세요. 사용자 지정 Dockerfile이나 .dockerignore를 사용하는 경우 이미지에 불필요한 파일을 복사하고 있을 수 있습니다.


애플리케이션 한도 2에 도달했습니다 , 도커 태그/버전 업데이트 불가: 애플리케이션 버전 한도 2에 도달했습니다

  • 무료 요금제 한도에 도달했습니다. 계정 업그레이드를 고려하세요. 또는 당사의 /을 통해 기존 리소스를 제거할 수 있습니다 대시보드.


새 애플리케이션 버전이 플러그인/확장에 나열되지 않습니다.

  • 마지막 단계에서 앱 버전 생성 양식을 완료했는지 확인하세요.

🚀 6. 클라우드에 배포

이 가이드의 마지막 단계로, 이 단계를 완료하면 전 세계 어디에서든 플레이어가 접속할 수 있는 Edgegap 클라우드에 서버가 배포됩니다.

☑️ 애플리케이션과 버전을 선택하세요 배포를 위해 이전 단계에서.

☑️ 준비가 되면, 누르세요 클라우드에 배포, 도달할 때까지 기다리세요 배포. 이 단계를 완료하면 결과적으로 새 배포가 시작됩니다 귀하의 Edgegap 계정에서.

☑️ 콘솔 출력에 새로운 오류가 없는지 확인하세요. 또한 다음이 배포 오류를 표시하지 않는지 및 귀하의 배포 가(이) vCPU 또는 메모리의 100% 자원 사용을 나타내지 않는지 확인하세요. 그렇지 않으면 새 플레이어 연결이 거부되거나 서버가 재시작 루프에 갇힐 수 있습니다. 문제 해결 단계는 아래를 참고하세요.

☑️ 이제 최종 테스트를 수행하고 Unity Editor 게임 클라이언트를 클라우드 배포에 연결. 배포의 다음 항목에서 게임 클라이언트 연결 세부 정보를 입력하세요:

  • 호스트 URL 서버 IP를 가리키며, 보통 다음에 있습니다 NetworkManager 컴포넌트.

  • 외부 포트 다음에 매핑되는 서버의 내부 리슨 포트, 보통 Transport 컴포넌트에 있습니다.

Edgegap 클라우드에서 배포의 외부 포트는 임의로 선택되어 잠재적 공격자(해커)가 피해를 일으키기 전에 속도가 느려지고 탐지되도록 합니다.

☑️ 배포에 문제없이 연결할 수 있음을 확인하고 테스트를 마쳤다면, 배포 중지 다음 빌드를 위해 계정의 용량을 확보하려면.

🙌 Edgegap에서의 첫 배포를 축하합니다! 더 알아보고 싶다면 계속 읽어보세요.

문제 해결 및 FAQ

클라이언트를 서버에 연결할 수 없습니다 - 요청 시간이 초과되었습니다. , 요청 시간 초과 , ConnectionFailed , 또는 포트 검증 실패

  • 먼저 배포 상태가 Ready인지, 그리고 배포 로그에 런타임 예외나 오류가 없는지 확인하세요. 배포가 중지되었다면 다음에서 로그를 확인하세요 대시보드.

  • Mirror netcode를 사용 중이라면 다음이 있어야 합니다 “Auto Start Server” 다음에서 선택되어 있어야 합니다 NetworkManager , 서버를 다시 빌드하고 푸시한 다음 재배포하세요.

  • FishNet netcode를 사용 중이라면 다음을 활성화해야 합니다 “Start on Headless” 다음에서 ServerManager, 서버를 다시 빌드하고 푸시한 다음 재배포하세요.

  • Photon Fusion 2 netcode를 사용 중이라면 서버가 배포의 공개 IP, 외부 포트 및 다음을 전달하고 있는지 확인하세요 roomCode 서버에서, 그리고 클라이언트에서 동일한 room code를 “NeworkRunner.StartGame” 매개변수 StartGameArgs. 배포 ID(예: b63e6003b19f)는 전역적으로 고유하고 클라이언트가 다음을 통해 쉽게 접근할 수 있어 좋은 선택입니다 Matchmaker심층 살펴보기.

  • 다음으로, 서버 빌드의 netcode 설정에서 지정한 포트 설정이 다음의 내부 포트와 일치하는지 확인하세요 앱 버전. 다음을 편집하여 포트 매핑을 변경할 수 있습니다 앱 버전 서버를 다시 빌드하지 않고도 가능합니다. netcode 통합에서 프로토콜을 찾으세요.

  • 게임 클라이언트가 다음에 연결하고 있는지 확인하세요 외부 포트 배포 상세 페이지에 표시됩니다. 이 값은 보안상의 이유로 항상 무작위로 지정됩니다.

  • netcode 통합에서 Secure Websocket(WSS) 프로토콜을 사용 중이라면, 다음이 앱 버전 WSS 포트의 포트 구성에서 TLS 업그레이드가 활성화되어 있는지 확인하세요.

  • 중국에 계시고 다음을 사용 중이신가요 Smart Fleets? 연결이 만리방화벽에 의해 차단될 수 있습니다. 중국에 위치한 서버를 플릿에 추가하거나 VPN을 사용해 연결하는 것을 고려해 보세요.


내 배포가 중지/재시작되었고 더 이상 로그에 접근할 수 없습니다.

  • 예외로 인해 서버 프로세스가 충돌하면 시스템이 서버를 자동으로 재시작하려고 시도합니다. 다음을 고려해 보세요 서버를 로컬에서 테스트 하여 근본 원인을 찾아내세요.

  • 로그는 배포 기간 동안만 보관됩니다. 배포가 중지된 후 로그를 확인하고 싶다면 제3자 로그 저장소를 통합하세요.

  • 다음을 참조하세요 배포 배포가 중지되는 모든 원인을 확인하세요.


내 배포가 X분 후 자동으로 중지되었습니다.

  • 무료 티어 배포는 60분 제한이 있으니 계정 업그레이드를 고려해 보세요.

  • 모든 배포는 서버 정리 정책에 따라, 인프라 유지보수를 위해, 그리고 배포가 제대로 종료되지 않았을 때 예기치 않은 비용이 쌓이는 것을 방지하기 위해 24시간의 실행 후 종료됩니다. 장기 실행 서버의 경우 다음 사용을 고려해 보세요 프라이빗 플릿 와 함께 영속성.

  • 다음을 참조하세요 배포 배포가 중지되는 모든 원인을 확인하세요.


내 배포는 준비되었지만 그 후 몇 분 동안 연결할 수 없습니다.

  • 배포가 Ready가 되면 게임 엔진 초기화가 시작됩니다. 이 과정은 수 초에서 수 분까지 걸릴 수 있으며, 이 기간 동안 서버는 플레이어 연결을 받지 않습니다.

  • 이 시간을 줄이기 위해 서버 초기화를 최적화하는 것을 고려해 보세요.

  • 게임 클라이언트는 제한된 시간 동안(초기화 시간에 따라) 1초 간격으로 연결을 재시도해야 하며, 그 후에는 매치메이킹으로 돌아가야 합니다.

  • 로딩 씬을 추가하여 서버가 클라이언트와 동시에 초기화(그리고 Unreal Engine의 경우 이동)를 수행하면서 양쪽 상태를 동기화하는 것을 고려해 보세요.


내 Meta Quest 기기가 다음 오류를 발생시킵니다 HTTP 0: 대상 호스트를 확인할 수 없음 .

  • Android 대상용 Unity 앱을 빌드할 때 출력 APK 클라이언트 빌드 아티팩트에서 Internet Access 권한이 자동으로 제거될 수 있습니다.

  • 다음에서 권한을 다시 추가하세요(이후 클라이언트 재빌드 필요):

    • Project Settings / OpenXR / ⚙️ Meta Quest Support / Force Remove Internet Permissions(체크 해제).

    • Player Settings / Internet Access(Require로 설정).


플레이어가 내 배포를 떠나면 어떻게 되나요?

  • 기본적으로 서버는 플레이어 연결을 거부하지 않습니다. 다양한 방법과 플레이어 인증 제공업체를 사용할 수 있으므로 플레이어 인증은 개발자에게 달려 있습니다.

  • 게임 클라이언트는 예기치 않은 클라이언트 충돌 시 재연결을 시도하기 위해 연결 정보를 로컬에 저장할 수 있습니다.

  • 플레이어가 진행 중인 게임에 참여할 수 있게 하려면 다음 사용을 고려해 보세요 심층 살펴보기 또는 세션.


내 서버는 준비된 후 CPU 사용률이 100%로 표시됩니다.

  • 게임 엔진은 서버 초기화 중에 CPU 집약적인 작업을 수행하는 경향이 있으므로, 이는 문제가 아닐 수 있습니다. 배포 시작 후 2~3분이 지나도 CPU 사용량이 떨어지지 않으면 서버를 최적화하거나 앱 버전 리소스를 늘려야 할 수 있습니다.

  • 틱 레이트를 줄이면 서버가 수행하는 메시징 작업이 줄어 CPU 사용량에 영향을 줄 수 있습니다.

  • Mirror netcode를 사용 중이라면 다음이 있어야 합니다 “Auto Start Server” 다음에서 선택되어 있어야 합니다 NetworkManager , 서버를 다시 빌드하고 푸시한 다음 재배포하세요.

  • FishNet netcode를 사용 중이라면 다음을 활성화해야 합니다 “Start on Headless” 다음에서 ServerManager, 서버를 다시 빌드하고 푸시한 다음 재배포하세요.

  • 무료 티어에서는 1.5 vCPU와 3GB 메모리(RAM)로 제한됩니다.

  • 기존 버전의 할당된 리소스를 편집하거나, 버전을 복제한 뒤 새 복사본에서 리소스를 수정할 수 있습니다. 어느 쪽도 서버를 다시 빌드할 필요는 없습니다.


내 배포가 반복적으로 재시작되며 오류를 표시합니다 OOM kill

  • 이는 할당된 메모리 양을 초과해서 발생합니다. 오브젝트 풀링, 압축 또는 씬에서 불필요한 오브젝트 제거로 메모리 사용을 최적화하는 것을 고려해 보세요.

  • 프로젝트가 다음을 포함하는 기본 씬을 로드하는지 확인하세요 NetworkManager 그리고 그 씬이 Unity의 Build Settings에 포함되어 있는지 확인하세요.

  • 무료 티어에서는 1.5 vCPU와 3GB 메모리(RAM)로 제한됩니다.

  • 기존 버전의 할당된 리소스를 편집하거나, 버전을 복제한 뒤 새 복사본에서 리소스를 수정할 수 있습니다. 어느 쪽도 서버를 다시 빌드할 필요는 없습니다.


가끔 내 서버의 메모리(RAM) 사용량이 높은 값으로 급증합니다. 문제가 되나요?

  • 할당된 앱 버전 메모리량을 초과하지 않는 한, 이는 문제가 아닙니다.

  • 할당된 앱 버전 메모리량을 초과하면 다음이 발생합니다 OOM kill (위 참조).


같은 머신에서 실행 중인 다른 서버가 내 서버 성능에 영향을 미치나요?

  • 아니요. 저희 플랫폼은 할당된 리소스가 다른 스튜디오나 공유 인프라의 다른 서버에 의해 사용되지 않도록 보장합니다. Edgegap에는 소음이 많은 이웃이 없습니다.

👉 다음 단계

클라이언트/서버 구성이 작동하면, 반드시 프로젝트 복사본을 저장하세요 (git과 같은 버전 관리 소프트웨어를 사용하여) 문제가 발생했을 때 항상 작업 내역을 추적할 수 있도록.

서버 수명주기 및 검색 가능성과 관련된 주제를 더 알아보려면 계속 읽으세요.

도움이 필요하시면 디스코드를 통해 문의해 주세요. 실시간 게임 지원은 저희의 티켓 시스템.

배포 중지

매치가 끝나면(또는 플레이어가 떠나면) 비용 절감을 위해 배포를 중지할 수 있습니다. 비어 있거나 일부만 채워진 배포를 실행하면 불필요하게 비용이 증가할 수 있습니다!

주입된 변수

주입된 환경 변수에 접근하여 배포 ID, 서버 IP 주소, 서버 위치 등 유용한 정보를 읽어보세요. 각 배포에는 자동으로 다음이 포함됩니다:

세션 자동화

다음 중 하나를 사용해 세션 관리 및 필요에 따른 확장을 위한 인기 게임 흐름을 자동화하세요:

매치메이킹:

  • 짧은 라운드

  • 온디맨드 매치

  • 실력 등급 및/또는 사용자 지정 규칙

서버 브라우저:

  • 지속형 또는 라운드

  • 소셜 지역 허브

  • 자동 할당 및/또는 사용자 지정 검색

사용자 지정 백엔드:

빌드 최적화

마지막 빌드 이후 변경된 에셋만 다시 빌드하세요.

다음 사용을 고려해 보세요 Unity의 증분 빌드 를 사용하면 빌드 시간을 단축할 수 있습니다.

  • 다음 사용을 고려해 보세요 Unity의 증분 빌드 를 사용하면 빌드 시간을 단축할 수 있습니다.

서버 실행에 꼭 필요한 것만 포함하세요.

이미지 크기를 줄이려면 메시에 대한 정적 배칭을 비활성화하세요.

이미지 크기를 줄이려면 메시를 압축하세요.

리소스의 조건부 지연 로딩을 구현하세요.

다음 사용을 고려해 보세요 다단계 Docker 빌드(링크).

  • 대용량 서버 종속성을 별도의 이미지로 분리해 다단계 빌드에서 재사용하세요. Docker는 각 레이어를 캐시하고 이전 버전을 그대로 재사용하며, 별도로 지시하지 않는 한 이 부분은 업로드를 건너뛰어 대역폭과 업로드 완료를 기다리는 시간을 절약해 줍니다.

  • Dockerfile 명령 중 하나가 왜 오류를 내는지 확실하지 않다면, 로컬에서 디버깅해 보세요. 문제가 발생하기 직전에 새 스테이지를 만들고(두 번째 FROM 명령)를 추가한 다음, --target 을 사용해 빌드 프로세스가 문제의 스테이지에서 멈추도록 지정한 다음 docker exec -it {container} /bin/bash 를 사용해 컨테이너 내부의 대화형 터미널로 들어가세요. 그런 다음 기본 이미지에서 셸 명령을 사용해 더 자세히 조사할 수 있습니다(예: top 우분투에서).

이미지 사용자 지정

또한 빌드 크기 최적화, 불필요한 종속성, 더 복잡한 시작 프로세스 때문에 이미지에 대한 더 많은 제어가 필요한 사용자를 위해 자체 Dockerfile 추가도 지원합니다. 4단계에서 사용자 지정 Dockerfile의 경로를 선택적으로 제공할 수 있습니다 Unity. 이제 몇 가지 “직접 해보는” 팁과 모범 사례를 공유하겠습니다.

항상 정상적으로 동작하는 서버 빌드를 사용하고 있는지 확인하세요.

  • 문제가 커스텀 Dockerfile과 관련된 것이라고 단정하기 전에, 서버 빌드가 정상적으로 시작될 수 있는지와 게임 엔진의 빌드 과정에서 예외나 오류가 발생하지 않았는지 확인하세요.

업로드하기 전에 항상 로컬에서 테스트하세요.

  • 이미지를 로컬에서 테스트하면 업로드가 완료될 때까지 기다리는 동안 많은 시간을 절약할 수 있습니다. 또한 Edgegap 리소스가 전혀 필요하지 않으므로 완전히 무료입니다 ✨

  • 로컬에서 테스트할 때는 내부 포트를 올바르게 설정했는지 확인하세요:

기본 사항을 제대로 이해했는지 확인하세요. 모든 Dockerfile에는 몇 가지 필수 명령이 필요합니다:

  • FROM {image} 는 기본 이미지입니다. 보통 장기 지원되는 Linux를 사용하지만, Linux 기반 기본 이미지라면 어떤 것이든 괜찮습니다. 보통 Docker Hub에 저장된 공개 이미지입니다. Dockerfile 참고는 여기입니다. Dockerfile 참고는 여기.

  • COPY {source} {destination} 호스트 머신의 Linux 서버 빌드를 이미지 안으로 복사하여 나중에 시작할 수 있게 합니다. Dockerfile 참고는 여기.

  • USER {user} 다음 뒤에 와야 합니다 useradd(우분투) 명령 또는 이에 상응하는 명령 뒤에 와야 하며, 모든 것을 root 로 실행하지 않는 것이 가장 좋습니다. Dockerfile 참고는 여기.

  • CMD {command} 가 마지막 줄이 되며, 대부분 다음을 호출합니다: StartServer.sh 또는 서버가 모든 설정 완료 후 올바르게 초기화되도록 하는 어떤 종류의 시작 스크립트입니다. Dockerfile 참고는 여기.

  • 사용하지 마세요 VOLUME - 이런 방식으로는 Edgegap에서 로컬 스토리지를 마운트할 수 없습니다. 대신 Endpoint Storage 기능을 고려하고 S3 버킷을 사용하세요. 다음을 참조하세요: Endpoint Storage,

  • EXPOSE 7777/UDP 는 필요하지 않습니다! 이것은 실제로 컨테이너 외부에서 내부 서버 포트를 사용할 수 있게 만드는 것이 아니라, 개발자를 위한 힌트일 뿐이며 포트는

    • 다음과 함께 로컬에서 테스트할 때 공개되어야 합니다 docker run <image> -p 7777/udp ,

    • 또는 다음에 매핑되어야 합니다 Edgegap 포트 매핑.

매개변수 선언은 가능한 가장 늦은 시점까지 미루세요. 서버 빌드 시간이 길기 때문에 구성 가능성 > 조합 가능성입니다. 이 접근 방식을 Dockerfile 명령에 적용하면 빌드와 업로드를 더 빠르게 할 수 있습니다.

  • 시나리오: 배포 단계, 버전, 게임 모드, 맵, 서버당 플레이어 수, 백업 빈도 또는 이와 유사한 매개변수를 정의해야 합니다.

  • 나쁜 해결책: 매개변수 조합마다 별도의 이미지를 만드는 것입니다. 이 접근 방식으로 얻는 이점은 거의 없는데, 이미지를 다시 빌드하는 데 모든 시간을 쓰게 됩니다.

  • 더 나은 해결책 - 구성 매개변수를 필요한 시점에 대체하세요:

    1. 배포 매개변수 - 배포 직전에 제공됨 - 환경 변수로 전달되는 매치메이킹 선택자, 또는 배포 시점에 환경 변수를 전달하는 사용자 정의 세션 관리 시스템,

    2. 버전 매개변수 - 앱 버전의 모든 배포에서 공유됨 - 배포 단계, 아티팩트 태그, 타사 비밀 및 엔드포인트 등; 그런 다음

    3. 하나의 단일 이미지 - 실행될 때 모든 구성 옵션을 포함하고 로드합니다.

Edgegap 배포에서 데이터베이스를 실행하지 마세요.

  • Edgegap 배포는 장시간 실행되는 프로세스를 위한 것이 아니며, 장시간 실행된 후 사전 통지 없이 종료될 수 있습니다. 이런 방식으로 실행되는 데이터베이스(분산형이라도)는 종료될 수 있으며, 돌이킬 수 없는 데이터 손실로 이어질 수 있습니다. 데이터베이스가 필요하다면 타사 DBaaS를 고려해 주세요.

  • 다음 기능 사용을 고려하세요: Managed Clusters 데이터베이스와 장기 실행 서비스를 호스팅하는 데 사용합니다.

막다른 길에 부딪히셨나요? 저희는 저희의 커뮤니티 디스코드 기꺼이 도와드립니다.

마지막 업데이트

도움이 되었나요?