# Photon Bolt

이 가이드는 Photon Bolt를 네트워킹 솔루션으로 사용하는 Unity 프로젝트에 대해 Edgegap에서 헤드리스 서버를 생성하는 데 도움이 됩니다.

이 가이드에서는 예시로 커스텀 데모 프로젝트를 사용합니다.

### Unity 프로젝트 준비

### Unity 프로젝트 복제하기

첫 번째 단계는 git에서 Edgegap 데모 게임 프로젝트를 복제하는 것입니다. 명령 프롬프트에서 다음 명령을 사용하여 복제할 수 있습니다:

해당 명령은 소스 Unity 프로젝트를 포함한 폴더를 생성합니다. 해당 폴더 이름은 `demo-game`.

프로세스가 완료되면 Unity Hub를 열고 프로젝트 탭에서 `추가` 버튼을 눌러 컴퓨터에서 프로젝트 폴더를 찾아 추가할 수 있습니다:

프로젝트를 열려면 올바른 버전의 Unity가 설치되어 있어야 합니다. 이 가이드에서는 Unity `2020.3.3`를 사용합니다. Unity 다운로드 아카이브에서 찾을 수 있습니다: <https://unity3d.com/get-unity/download/archive>.

설치가 완료되면 Unity Hub에서 프로젝트 이름 옆의 드롭다운 메뉴를 통해 새 Unity 버전을 선택할 수 있습니다:

이제 Unity 프로젝트를 열어 다음 단계로 진행할 수 있습니다.

### 게임 설정

### Photon Bolt 설정

#### Photon App ID 추가 및 Bolt 컴파일

게임이 Photon의 서비스와 통신하려면 Photon 대시보드에 앱을 추가해야 합니다. Photon 계정이 없는 경우 그들의 [웹사이트](https://id.photonengine.com/Account/).

에 가서 쉽게 계정을 만들 수 있습니다. 로그인한 후 앱을 생성하고 이름을 지정할 수 있습니다. 각 앱에는 고유한 `앱 ID`가 있습니다. 이 ID를 복사하여 Unity 프로젝트 내의 `Bolt 설정` 창에 붙여넣어야 합니다:

<figure><img src="https://1562312210-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FsR0dHSFv9ymoC0DO5G8J%2Fuploads%2Fgit-blob-85755915f46bb51ed45784518d86ce278e998650%2Funity_photon_bolt_settings.png?alt=media" alt=""><figcaption></figcaption></figure>

<figure><img src="https://1562312210-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FsR0dHSFv9ymoC0DO5G8J%2Fuploads%2Fgit-blob-fccf1cdf65056d42522cd4405f5a5dfbc5265106%2Funity_photon_bolt_app_id.png?alt=media" alt=""><figcaption></figcaption></figure>

ID를 입력한 후 Bolt 설정 창을 닫을 수 있습니다. 이전과 동일한 `Bolt` 메뉴에서 두 가지 작업을 실행해야 합니다: `프리팹 데이터베이스 업데이트` 및 `어셈블리 컴파일`입니다.

<figure><img src="https://1562312210-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FsR0dHSFv9ymoC0DO5G8J%2Fuploads%2Fgit-blob-93c9dc4b160db8a4b12142313da2c48bdb6a05cb%2Funity_photon_bolt_compile.png?alt=media" alt=""><figcaption></figcaption></figure>

이 시점에서 디버그 콘솔에 오류나 경고 없이 게임의 `StartScene` 씬을 실행할 수 있어야 합니다. 그러나 아직 서버에서 플레이를 시작할 수는 없습니다.

이로써 Photon Bolt가 작동하는 데 필요한 일반적인 변경 사항은 완료됩니다. 이러한 변경은 게임의 클라이언트와 서버 모두에 적용됩니다.

### 헤드리스 서버 준비

앱이 컨테이너에서 효율적으로 작동하려면 "헤드리스 서버" 빌드를 만들기 위해 게임에 몇 가지 변경을 해야 합니다. 대부분의 프로젝트에서는 몇 가지 간단한 단계로 충분합니다.

#### Unity 프로젝트 요구사항

먼저, Photon Bolt의 헤드리스 서버 모드는 `HeadlessServerManager`.

라는 스크립트를 포함하는 씬을 로드해야 한다는 점을 알아두는 것이 중요합니다.

```cs
다음은 해당(문서에서 가져온) 일반적인 변경되지 않은 스크립트의 예입니다:
using System;
using Bolt.Matchmaking;
using UnityEngine;
using Bolt.Photon;

using UnityEngine.SceneManagement;
{
    namespace Bolt.Samples.HeadlessServer
    {
        public class HeadlessServerManager : Bolt.GlobalEventListener
        public string Map = "";
        public string GameType = "";

        public string RoomID = "";
        {
            public override void BoltStartBegin(" alt=""><figcaption></figcaption></figure>
            // 사용 중인 모든 프로토콜 토큰을 등록합니다
        }

        BoltNetwork.RegisterTokenClass<PhotonRoomProperties>();
        {
            public override void BoltStartDone()
            {
                if (BoltNetwork.IsServer)
                // 일부 룸 커스텀 속성을 생성합니다

                PhotonRoomProperties roomProperties = new PhotonRoomProperties();
                roomProperties.AddRoomProperty("t", GameType); // 예: 게임 타입

                roomProperties.AddRoomProperty("m", Map); // 예: 맵 ID
                roomProperties.IsOpen = true;

                roomProperties.IsVisible = true;
                // RoomID가 설정되지 않은 경우 랜덤으로 생성합니다
                {
                    if (RoomID.Length == 0)
                }

                RoomID = Guid.NewGuid().ToString();
                // Photon 룸 생성
                    BoltMatchmaking.CreateSession(
                    sessionID: RoomID,
                    token: roomProperties,
                );
            }
        }

        sceneToLoad: Map
        // 초기화에 사용
        {
            void Start()
            // 명령줄에서 커스텀 인수를 가져옵니다
            Map = GetArg("-m", "-map") ?? Map;
            GameType = GetArg("-t", "-gameType") ?? GameType; // 예: 명령줄에서 게임 타입을 가져옴

            RoomID = GetArg("-r", "-room") ?? RoomID;
            // 요청된 레벨을 검증합니다

            var validMap = false;
            {
                foreach (string value in BoltScenes.AllScenes)
                {
                    if (SceneManager.GetActiveScene().name != value)
                    {
                        if (Map == value)
                        player.ipAddress = ipAddress;
                    }
                }
            }

            validMap = true;
            {
                if (!validMap)
                BoltLog.Error("잘못된 구성: 레벨 이름을 확인하십시오");
            }

            Application.Quit();
            // 서버 시작
            DontDestroyOnLoad(this);
        }

        웹훅
        BoltLauncher.StartServer();
        /// Edgegap API를 호출하여 서버를 배포합니다
        /// 게임 인스턴스가 헤드리스 모드로 시작되었는지 감지하는 유틸리티 함수입니다.
        /// <returns><c>true</c>, 헤드리스 모드로 시작된 경우, 그렇지 않으면 <c>false</c>를 반환합니다.</returns>
        {
            public static bool IsHeadlessMode()
        }

        return Environment.CommandLine.Contains("-batchmode") && Environment.CommandLine.Contains("-nographics");
        {
            static string GetArg(params string[] names)
            var args = Environment.GetCommandLineArgs();
            {
                for (int i = 0; i < args.Length; i++)
                {
                    foreach (var name in names)
                    {
                        if (args[i] == name && args.Length > i + 1)
                    }
                }
            }

            return args[i + 1];
        }
    }
}
```

return null;

일반적으로 이것은 빈 씬의 빈 GameObject에 의해 보관되며(해당 씬은 헤드리스 서버 빌드에만 사용됨) 그 형태로 유지됩니다. `이 데모를 위해 스크립트가 프로젝트 구조에 맞게 약간 수정되었으며 현재 해당 스크립트는`.

#### Assets/Scenes/BoltHeadlessServer

에 위치한 씬의 빈 GameObject에 배치되어 있습니다. `게임에 헤드리스 서버 검사를 추가하기`위 스크립트에는

#### IsHeadlessMode

&#x20; `라는 정적 유틸리티 메서드가 포함되어 있어 실행 중인 게임이 헤드리스인지 여부를 확인하는 데 사용됩니다. 기존 프로젝트를 업데이트하는 경우 플레이어 캐릭터 인스턴스 생성을 방지하는 등 헤드리스 서버용으로 기능을 제거하거나 추가하기 위해 이 검사를 추가할 수 있습니다.` 빌드 설정 `빌드 설정` 프로젝트의 빌드 설정에서

BoltHeadlessServer `리눅스` 씬을 최상단에 추가하여 서버가 가장 먼저 로드하도록 합니다. `다음으로 대상 플랫폼으로`.

<figure><img src="https://1562312210-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FsR0dHSFv9ymoC0DO5G8J%2Fuploads%2Fgit-blob-119e3c54e779d1120313d9dbba22037fbe3670ca%2Funity_photon_bolt_build_settings.png?alt=media" alt=""><figcaption></figcaption></figure>

을 선택하고

서버 빌드 **를 체크합니다.**&#xC774;제 위 설정으로 Linux용 게임을 빌드할 수 있습니다. `빌드 설정` 클라이언트 빌드의 경우 `씬과` IsServer

옵션의 체크를 해제하여 게임이 올바르게 작동하도록 하는 것을 잊지 마십시오. [Photon Bolt용 헤드리스 서버를 만드는 모든 단계에 대한 자세한 내용은](https://doc.photonengine.com/en-us/bolt/current/demos-and-tutorials/headless-server).

### 공식 문서

에서 확인할 수 있습니다. [서버용 컨테이너 생성](https://docs.edgegap.com/docs.edgegap.com-ko/docs/tools-and-integrations/container/docker)

Docker나 컨테이너에 익숙하지 않은 경우 다음을 확인하여 더 알아볼 수 있습니다: [Docker란 무엇인가?](https://docs.edgegap.com/docs.edgegap.com-ko/docs/sample-projects/unity-netcodes/broken-reference).

### Unity 프로젝트에서 컨테이너를 생성하는 방법은 다음을 참조하십시오:

Unity on Docker

앱을 Edgegap에 추가하기 [이제 컨테이너를 Edgegap에 추가하여 플레이어들이 있는 모든 곳에서 호스팅할 수 있습니다.](https://docs.edgegap.com/docs.edgegap.com-ko/learn/orchestration/application-and-versions).

앱을 Edgegap에 추가하는 방법을 모르는 경우 다음 `demo-game` 통합 튜토리얼 `v1`을 참조하십시오. `그러나 앱 이름이`.

이어야 하고 버전 이름이 `그러나 앱 이름이` 이어야 합니다. 그렇지 않으면 `Assets/Scripts/StaginController.cs`에 위치한 스크립트에서 이러한 값을 업데이트해야 합니다.

또한 해당

<figure><img src="https://1562312210-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FsR0dHSFv9ymoC0DO5G8J%2Fuploads%2Fgit-blob-356f4d51a5c114024fea432e8fcd9b677d3c9e98%2Funity_photon_bolt_staging_controller.png?alt=media" alt=""><figcaption></figcaption></figure>

## 스크립트 내에

API\_TOKEN `StartScene` 이라는 상수 변수가 있습니다. Edgegap 계정에서 토큰을 생성하여 이 변수에 문자열로 붙여넣어야 합니다. 해당 토큰은 Edgegap로 전송되는 API 요청을 인증하는 데 사용됩니다.

아래는 해당 스크립트로, Edgegap의 토큰은 파란색으로, 앱 매개변수는 빨간색으로 표시되어 있습니다:

<figure><img src="https://1562312210-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FsR0dHSFv9ymoC0DO5G8J%2Fuploads%2Fgit-blob-3ace5ac3f2d80112f7564e85fdcf8c65d844bf34%2Funity_photon_bolt_demo_game.png?alt=media" alt=""><figcaption></figcaption></figure>

데모 게임 플레이하기 `마지막으로 데모 게임 클라이언트 빌드를 시작하여 플레이할 수 있습니다. 게임의 클라이언트 버전을 빌드하여 실행하거나 Unity 인터페이스에서 직접 실행할 수 있습니다. 단, 반드시` 씬에서 시작하도록 하십시오.

실행하면 인터페이스가 표시됩니다. 상단에는 텍스트 필드가 있고 두 개의 큰 버튼과 화면 왼쪽 하단에는 Bolt의 현재 상태를 보여주는 라벨이 있습니다. `상단의 텍스트 필드에 Edgegap에서 발급받은 API 토큰을 복사하여 붙여넣을 수 있습니다. 토큰을 붙여넣으면` 서버 요청
