PUN Classic (v1), PUN 2, Bolt는 휴업 모드입니다. Unity2022에 대해서는 PUN 2에서 서포트하지만, 신기능의 추가는 없습니다. 현재 이용중인 고객님의 PUN 및 Bolt 프로젝트는 중단되지 않고, 퍼포먼스나 성능이 떨어지는 일도 없습니다. 앞으로의 새로운 프로젝트에는 Photon Fusion 또는 Quantum을 사용해 주십시오.

Frequently Asked Questions

어떤 Photon 제품이 나에게 맞을까요?

이에 대한 답변은 주로 귀하의 프로젝트와 팀에 따라 달라집니다.
일반적으로, 저희는 가장 진보된 클라이언트 솔루션인 Fusion 또는 Quantum을 사용하는 것을 권장합니다.

빠른 개요를 위해 두 제품 시트 모두 제품 선택기 "Quadrant"를 포함합니다:

의문 사항이 있으시면 언제든지 연락주시길 바랍니다.

Photon Cloud

Photon Cloud는 다운되나요?

Photon Cloud 상태는 여기에서 확인하거나 트위터에서 @exitgames를 팔로우하여 상태 업데이트에 대해 알림을 받으십시오.

기본 Photon 지역은 어디인가요?

고객들은 최소 하나의 지역을 사용할 수 있으면 Photon Cloud에 연결할 수 있어야합니다.
이에 대해 보장을 위해, 기본값이 구성되어있거나 개발자가 명시적으로 값을 설정하지 않거나 "최적 지역" 옵션을 선택하지 않을 때 사용됩니다.
기본값은 클라이언트 SDK에 따라 다양할 수 있습니다.
원시 SDK에서는 OpGetRegions 에 의해 서버에서 리턴되는 지역 목록의 첫 번째 인덱스에 있는 값입니다.
Unity와 DotNet SDK에서 기본 지역은 "EU" 입니다.

일부 지역을 비활성화할 수 있나요?

예.
이 기능은 "비활성화된" 지역 없이 "지역 허용 목록"을 정의하여 작동합니다.
"대시보드 지역 필터링"에 대해 자세히 알아보세요.

모든 클라우드 서버/IP 목록을 얻을 수 있나요?

Photon Cloud가 너무 자주 변경되기 때문에 이러한 목록은 존재하지 않습니다. 서버가 추가되거나 제거되고 때때로 새로운 지역이 나타납니다. 즉, Photon Cloud(전체)를 허용 목록에 추가하는 것은 불가능합니다.

Enterprise Cloud의 경우 다른 주제이기 때문에 메일로 문의해 주시길 바랍니다.

Photon Industries Circle 내의 앱은 허용 목록에 대한 호스트 이름에 의존할 수 있습니다: *.photonindustries.io. 연결할 "서버"로 ns.photonindustries.io를 사용해야 합니다.

Photon Bolt

엄격한 비교는 무엇인가요?

엄격한 비교는 a != b 내장형 벡터 비교를 사용하는 대신 더 정확한 (a.x != b.x) || (a.y != b.y) || (a.z != b.z) 식을 사용합니다. 복제가 필요한 변경 사항이 매우 적은 경우에 유용합니다.

재배포 가능한 Bolt Server 빌드를 만들 수 있는 방법이 있습니까?

네, Bolt는 헤드리스 서버 생성을 지원하므로 원하는 모든 컴퓨터에서 서버를 실행할 수 있습니다.
Photon Cloud를 사용하는 Bolt Free를 사용하는 경우, 다른 플레이어가 참여할 수 있도록 룸만 게시됩니다. Bolt Pro를 사용하는 경우에도 로컬 또는 클라우드 서비스에서 볼트를 실행할 수 있으며 다른 플레이어들에게 연결할 IP를 전송할 수 있는 방법이 필요합니다.

여기에서 간단한 헤드리스 서버 샘플을 참고하십시오.

로켓과 같은 발사체 지연 보상을 해야 하나요?

발사체를 발사하는 무기의 경우 지연 보상이 더 문제가 됩니다.
예를 들어, 발사체가 서버에 독립적으로 있는 경우, 발사체는 얼마나 존재해야 할까요?
발사체가 시뮬레이션되고 서버가 이동시켰다면 다른 플레이어를 모두 "뒤로 이동"해야 하나요?
만약 그렇다면, 다른 플레이어들은 얼마나 뒤로 움직여야 할까요? 이러한 문제들은 흥미롭고 많이 고려해야할 문제입니다.
Half-Life에서 이 문제들을 회피했습니다: 간단하게 발사체 객체들의 보상 지연을 하지 않았습니다(그렇다고 해서 클라이언트에게 발사체를 발사하는 소리를 예측하지 않는다는 것은 아닙니다. 단지 실제 발사체는 어떠한 방식으로도 보정되지 않습니다).
여기에서 더 많은 정보를 확인해보세요.

프로젝트의 모든 Bolt 에셋들을 어떻게 지우나요?

모든 Bolt 에셋들은 project.json 파일에 직렬화되므로 지우기 위해서는:

  1. 유니티를 닫습니다
  2. <Project Folder>/Assets/Photon/PhotonBolt/project.json 파일을 삭제합니다;
  3. 유니티를 오픈합니다.
  4. Bolt/Compile Assembly 메뉴로 Bolt를 컴파일합니다.

EC2에서 헤드리스 서버용 Bolt 프리 사용을 위한 권장되는 환경구성은 무엇인가요?

>방화벽 환경구성
방화벽 환경구성.

스니펫

다음은 게임을 개발하는 데 도움이 될 수 있는 작은 코드 모음입니다.

텔레포트 하는 방법?

기본적으로 Bolt는 엔티티에 지정된 텔레포트 임계값보다 이동 거리가 작을 경우 엔티티를 자동으로 보간/추론합니다.
이것보다 더 큰 값이면 부드럽게하는 것을 없애고 강제로 텔레포트하고 이 사항은 자동으로 발생됩니다.
Bolt.IState.SetTeleport(NetworkTransform transform)로 강제적으로 텔레포트를 할 수 있으며 이는 기본적으로 설정에 관계없이 텔레포트를 강제 적용하기 위해 클라이언트로 전송된 다음 위치 업데이트에 대한 요청을 큐에 넣습니다(한 번 보내는 체크 표시의 경우 - 플래그가 전송된 후 다시 false로 설정됩니다).

C#

void Teleport(Vector3 newPosition)
{
    state.SetTeleport(state.transform);
    player.transform.position = newPosition
}

SessionListUpdate가 호출되지 않는 경우 검색 시 세션이 없는지 어떻게 알 수 있나요?

예를 들어 1.2.9 이전, 룸 목록 갱신을 5초로 설정한 경우 콜백을 받으려면 5초간 기다려야 합니다.
그후 사용 가능한 세션이 없다는 것을 알게 될 것입니다.
이제 Photon Bolt 1.2.9부터는 5초간 기다리기 위해 연결했을 때 코로틴 프로세스를 시작할 수 있습니다.

시작하기 샘플과 함께 제공되는 기본 메뉴 스크립트에 구현 예제가 포함되어 있습니다.
다음은 주요 부분입니다.

C#

public class Menu : Bolt.GlobalEventListener
{
    private Coroutine _timerRoutine;

    // ...

    public override void BoltStartDone()
    {
        // ...

        if (BoltNetwork.IsClient)
        {
            // This will start a server after 10secs of wait if no server was found
            _timerRoutine = StartCoroutine(ShutdownAndStartServer());
        }
    }

    public override void BoltShutdownBegin(AddCallback registerDoneCallback)
    {
        registerDoneCallback(() =>
        {
            BoltLauncher.StartServer();
        });
    }

    public override void SessionListUpdated(Map<Guid, UdpSession> sessionList)
    {
        // Stop background routine if a server was found
        if (_timerRoutine != null)
        {
            StopCoroutine(_timerRoutine);
            _timerRoutine = null;
        }
    }
}

게임 서버를 시작할 때 특정 포트는 어떻게 설정하나요?

Photon Bolt 인스턴스를 게임 서버로 실행할 때 피어가 바인딩할 IP/포트를 구성할 수 있습니다.
예를 들어 클라우드 서비스에서 게임을 호스팅하고 있으며 사용할 포트 범위가 제한된 경우에 유용합니다.

기본적으로 Bolt는 운영 체제가 내부 소켓을 바인딩할 포트를 선택할 수 있도록 허용하지만, 아래와 같이 BoltLauncher.StartServer의 오버로드를 호출하여 덮어쓸 수 있습니다:

C#

public static class BoltLauncher
{
// ...
    public static void StartServer(int port = -1);
    public static void StartServer(UdpEndPoint endpoint, string scene = null);
    public static void StartServer(UdpEndPoint endpoint, BoltConfig config, string scene = null);
// ...
}

따라서 아래와 같이 서버를 시작할 수 있습니다:

C#

void StartBoltServer()
{
    // Custom Port number
    BoltLauncher.StartServer(<custom port>);

    // OR

    // Custom IP and Port number
    BoltLauncher.StartServer(new UdpEndPoint(UdpIPv4Address.Parse("<custom IP>"), <custom port>))
}

코드를 사용하여 Bolt 기본 구성을 변경하는 방법은 무엇입니까?

서버나 클라이언트를 시작하기 전에 코드를 통해 볼트 구성을 사용자 지정하려면 BoltRuntimeSettings.GetConfigCopy를 호출하고 반환된 객체를 수정한 다음 StartClient 또는 StartServer의 마지막 인수로 전달하면 됩니다.

Bolt Settings 창에 노출되지 않은 더 많은 설정에 코드를 통해 접근할 수 있습니다.

C#

    BoltConfig config = BoltRuntimeSettings.instance.GetConfigCopy();

    // change any settings you want on the config object here,
    // be aware that bolt will not verify/limit any settings when you do
    // it directly in code, so you can break things completely by supplying
    // incorrect/invalid config values.

    BoltLauncher.StartServer(new UdpEndPoint(UdpIPv4Address.Any, 27000), config);

Bolt에서 인터넷 연결이 끊어졌을 때 어떻게 감지하나요?

기본적으로 인터넷 연결이 끊어지면 Bolt는 Photon Cloud 서비스와 원격 서버 또는 클라이언트와의 연결이 끊어졌음을 감지합니다. 모든 경우에 로컬 인스턴스는 타임아웃이 발생한 후 종료되며, 이는 주로 연결 측(서버 또는 클라이언트)과 연결 유형에 따라 달라집니다.

종료 시, 현재 씬에서 실행 중인 Bolt.GlobalEventListener에 대해 다음 콜백을 받게 됩니다.

C#

public override void BoltShutdownBegin(AddCallback registerDoneCallback, UdpConnectionDisconnectReason disconnectReason)
{
    registerDoneCallback(() =>
    {
        // Will show disconnect reason.
        Debug.LogFormat("Shutdown Done with Reason: {0}", disconnectReason);

        // Show the current connectivity of the peer
        ConnectivityCheck();

        // Lods the Scene at index 0
        SceneManager.LoadScene(0);
    });
}

void ConnectivityCheck()
{
    if (Application.internetReachability == NetworkReachability.NotReachable)
    {
        Debug.Log("NotReachable");
    }
    else if (Application.internetReachability == NetworkReachability.ReachableViaCarrierDataNetwork)
    {
        Debug.Log("ReachableViaCarrierDataNetwork");
    }
    else if (Application.internetReachability == NetworkReachability.ReachableViaLocalAreaNetwork)
    {
        Debug.Log("ReachableViaLocalAreaNetwork");
    }
}

인터넷 연결 부족으로 인해 연결이 끊어졌는지 확인하려면 Unity API를 통해 사용할 수 있는 Application.internetReachability 속성을 살펴보세요.

과금

학생, 취미자 또는 인디 개발자를 위한 특별 제안이 있나요?

저희의 모든 제품에는 프리티어와 일회 지불하는 가격 정책이 있습니다.
또한 우리는 Unity 에셋 스토어에서 판매를 하고 있으며 때로는 바우처를 제공해드립니다.

Photon 애플리케이션 하나에 대해 100 CCU 플랜을 하나 이상 결합할 수 있습니까?

아니오.
100 CCU 플랜은 겹쳐서 사용할 수 없으며 AppId당 딱 한 번만 적용할 수 있습니다.
여러개의 PUN+ 에셋 시트를 구입한 경우 AppId 별로 100 CCU에 대해 리딤해주어야 합니다.
단일 앱에 대해 더 많은 CCU가 필요한 경우, 다음으로 높은 요금제는 500 CCU입니다.
월간 또는 연간 플랜에 가입한 경우, 월간/연간 플랜의 CCU에 추가로 12개월 동안 100 CCU가 유지됩니다.

Photon 플랜에 얼마나 많은 트래픽이 포함되어 있나요? 앱에서 포함된 한도를 넘는 트래픽을 생성하면 어떻게 되나요?

Photon Public Cloud 및 Premium Cloud 플랜에는 CCU당 3GB가 포함됩니다.

예를 들어, 1,000개의 CCU를 갖춘 월간 요금제에는 월 3TB의 트래픽이 포함됩니다.

앱이 더 많은 트래픽을 생성하면 자동으로 이메일을 통해 알림을 보냅니다. 매월 말에 Photon 계정 이메일 주소로 자동 생성된 초과 청구서를 받게 됩니다. 청구서 금액은 다음 계산을 기반으로 합니다.

총 트래픽 - 포함 트래픽 = 초과 트래픽(GB)

트래픽은 사용된 Photon Cloud 지역에 따라 GB당 90원/180원으로 계산되고 추가 청구됩니다.

Photon Cloud 플랜의 구독한 CCU를 피크 CCU가 초과하면 어떻게 되나요?

500 CCU / 1,000 CCU / 2,000 CCU 플랜에 가입한 경우, 애플리케이션에 대해 "CCU 버스트"가 자동으로 활성화됩니다. Photon Cloud는 사용자에게 최상의 경험을 제공하기 위해 예약한 것보다 더 많은 CCU를 허용합니다.

버스트가 시작되면 합의된 조건에 따라 48시간 이내에 필요한 구독 등급으로 업그레이드해야 합니다.

업그레이드하지 않으면 Photon 계정 이메일 주소로 "초과 청구서"를 보내고 구독한 플랜을 초과하는 각 CCU에 대해 CCU당 1350원/1400원/1800원(사용된 SDK 기준)의 수수료를 청구합니다.

Photon은 "피크 CCU"는 해당 달에 합산된 지역별 피크 CCU의 합계입니다. 피크에 도달한 후 사용량이 감소하더라도 초과 요금을 피하기 위해 업그레이드해야 합니다.

Back to top