Photon Voice1은 Photon Voice의 첫 버전입니다.        현재는 리팩터링/확장을 거친 Photon Voice 2이 준비되어 있으므로 새로운 프로젝트를 시작할 경우에는 Photon Voice 2를 사용하시는 것을 권장합니다.

자주 문의하는 질문들

Contents

저에게 적합한 Photon 제품은 무엇인가요?

이 질문에 답하기는 좀 까다롭습니다. 왜냐하면 이는 만들고 있는 게임과 프로젝트의 특성에 따라 달라지기 때문입니다. 하지만 다음과 같이 권고해드립니다:

Back To Top

Photon Realtime 과 PUN의 차이점은 무엇인가요?

Photon Realtime 과 PUN 모두 동일한 API 기반입니다: LoadBalancing API. 이 두 제품 모두 동일한 백엔드, 동일한 서버 어플리케이션, 동일한 저수준 기능, 동일한 핵심 개념을 공유합니다. 우선, PUN 은 더 좋은 UNet (이전 Unity Networking)이었습니다: 동일한 API를 유지하면서 더 견고한 백엔드와 더 많은 기능이 있습니다. 그후 천천히 발전하여 Unity에서 최고의 멀티 플레이어용 솔루션이 되었습니다.

우리에게는 Photon Realtime Unity SDK도 있으나 PUN에는 다음과 같은 고수준의 기본 제공 기능이 있습니다:

  • Magic Unity 콜백
  • 직렬화하고 동기화하는 추가 유니티 컴포넌트. 네트워크화된 객제: PhotonView 에서 가장 중요한 것 중 하나
  • PunRPC
  • 오프라인 모드
  • ...

여기에서 더 자세히 알아보세요.

PUN 이 webhooks룸 상대 지속을 지원하지만, 저장된 게임을 로드할 때 네트워크로 연결된 개체의 상태를 100% 다시 라우팅 할 수 없습니다. 여기를 자세히 읽어보십시오.

Back To Top

Photon Cloud

Photon Cloud는 다운되나요?

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

Back To Top

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

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

Back To Top

일부 지역을 사용할 수 없도록 하는 것이 가능한가요?

네. 허용된 지역을 정의하여 다른 방식으로 작동합니다. "관리화면 지역 필터링"에 대해 더 읽어보십시오.

Back To Top

Photon Voice

How To Save Conversations Into Files?

We will answer this question in two parts:

First, incoming voice streams:

Photon Voice streams are uniquely identified using the pair: PlayerId and VoiceId. So given this pair you can guess the origin of the remote voice stream: which player and which recorder. You can subscribe to three events for remote streams:

  • PhotonVoiceNetwork.Client.OnRemoteVoiceInfoAction: a new remote voice stream is created (started transmission) with information received.
  • PhotonVoiceNetwork.Client.OnAudioFrameAction: an audio frame is received from a specific remote voice stream.
  • PhotonVoiceNetwork.Client.OnRemoteVoiceRemoveAction: a remote voice stream has ended and is destroyed (stopped transmission).

If you want to capture an entire incoming remote voice stream, you can:

  1. Create and open file for the stream in OnRemoteVoiceInfoAction handler.
  2. Write frame of audio data in OnAudioFrameAction handler.
  3. Save and close the file in OnRemoteVoiceRemoveAction handler.

Or you can open and close file and update OnAudioFrameAction accordingly on user input.

Second, outgoing voice streams:

For outgoing audio stream, you can create Voice.LocalVoiceAudio<T>.IProcessor and insert it in local voice processing pipeline. The component needs to be attached to the same GameObject as the PhotonVoiceRecorder to intercept PhotonVoiceCreated Unity message. You can find get locally recorded audio frame in IProcessor.Process. See "DelayProcessor.cs" in TestVoice folder for a demo.

Back To Top

How To Use A Custom Audio Source With PhotonVoiceRecorder?

To change PhotonVoiceRecorder to transmit audio produced by your own custom audio source:

First approach: data stream is driven by consumer

AudioClipWrapper is a sample of this approach. It streams audio clip assigned in editor.

  1. Create a class reading your audio source and implementing ExitGames.Client.Photon.Voice.IAudioReader interface. e.g. MyAudioReaderSource.
  2. Set PhotonVoiceRecorder's Source to Factory in editor (or in code).
  3. Create an instance of your class somewhere during app initialization (before creation of PhotonVoiceRecorder):

        // MyAudioSource is just an example, replace with your own class name and constructor
    PhotonVoiceNetwork.AudioSourceFactory = (rec) => new MyAudioReaderSource();
  4. As long as client is connected to a voice room and PhotonVoiceRecorder is transmitting, IAudioReader.Read(float[] buffer) method will be called on your custom audio source instance (e.g. MyAudioReaderSource). Calls frequency and buffer size are adjusted to meet sampling rate returned by IAudioReader.SamplingRate property of your custom audio source instance (e.g. MyAudioReaderSource).

Second approach: data stream is driven by producer

ToneAudioPusher in "AudioUtil.cs" is a sample of this approach.

  1. In this case it may be more convenient to implement ExitGames.Client.Photon.Voice.IAudioPusher interface instead. e.g. MyAudioPusherSource. You need to implement IAudioPusher.SetCallback method only which mainly stores given callback.
  2. Set PhotonVoiceRecorder's Source to Factory in editor (or in code).
  3. Create an instance of your class somewhere during app initialization (before creation of PhotonVoiceRecorder):

        // MyAudioSource is just an example, replace with your own class name and constructor
    PhotonVoiceNetwork.AudioSourceFactory = (rec) => new MyAudioPusherSource();
  4. During streaming, you simply call the callback set using IAudioPusher.SetCallback periodically (e.g. from MonoBehaviour.OnAudioFilterRead) with as many samples as you have. Photon Voice will do all buffering work for you.

Back To Top

과금

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

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

Back To Top

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

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

기술문서 TOP으로 돌아가기