Frequently Asked Questions
- Which Photon product is the right one for me?
- What is the difference between Photon Realtime and PUN?
- What is the difference between LoadBalancing API and Photon Realtime?
- Photon Cloud
- Photon Voice
Which Photon product is the right one for me?
This is a difficult question to answer as it depends on the game you are making and the specifics of your project. However we can recommend the following:
- Watch this talk by our CTO and founder Chris Wegmann at Unite Europe 2017
- Read the comparison page: "PUN vs. Bolt"
- Read the comparison page: "Photon Cloud or Photon Server?"
Feel free to reach out to us if you still have questions.
What is the difference between Photon Realtime and PUN?
Photon Realtime wraps up all generic features needed for the load balancing of Photon. It is a product as much as a defined workflow to use Name Server, Master Server and Game Servers. Photon Realtime (a.k.a. LoadBalancing) is the basis for many games using Photon.
While Photon Realtime is independent from Unity, PUN adds many comfortable features for Unity and makes Realtime (the lower level) even easier to use.
Both products share the same backend, same server applications, same low-level stuff, same core concepts. At first PUN was meant to be a better UNet (old Unity Networking): preserve a similar API with a more solid backend and rich features. Then it slowly diverged and became the number 1 solution for multiplayer on Unity.
While we do have a Photon Realtime Unity SDK, PUN has more high level out-of-the-box features like:
- Magic Unity callbacks
- Extra Unity components that serialize and sync. networked objects for you: most important one PhotonView
- Offline mode
Read more here.
What is the difference between LoadBalancing API and Photon Realtime?
LoadBalancing API and Photon Realtime can be two different names for the same thing. The LoadBalancing API or the LoadBalancing Client API is the programming interface available in the client SDKs we provide for the Photon Realtime product.
Is Photon Cloud down?
What is the default Photon region?
Clients should be able to connect to Photon Cloud as long as at least one region is available.
So to guarantee this, a default value is configured or is used when the developer does not explicitly set one or choose "Best Region" option.
The default value could vary by client SDK.
In native SDKs, it is the value at index 0 of the region list returned by server in
On Unity and DotNet SDKs, the default region should be "EU".
Is it possible to disable some regions?
Yes. It works in the other way around by defining a list of allowed regions. Read more about the "Dashboard Regions Filtering".
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:
VoiceConnection.RemoteVoiceAdded(RemoteVoiceLink): a new remote voice stream is created (started transmission) with information received.
RemoteVoiceLink.FloatFrameDecoded(float): an audio frame is received from a specific remote voice stream.
RemoteVoiceLink.RemoteVoiceRemoved: a remote voice stream has ended and is destroyed (stopped transmission).
If you want to capture an entire incoming remote voice stream, you can:
- Create and open file for the stream in
- Write frame of audio data in
- Save and close the file in
Or you can open and close file and update
FloatFrameDecoded 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
Recorder to intercept
PhotonVoiceCreated Unity message.
You can find get locally recorded audio frame in
See "WebRtcAudioDsp.cs" for a demo.
How to use a custom audio source?
If you want the
Recorder 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 to
- Create a class reading your audio source and implementing
Factoryin editor (or in code).
Create an instance of your class somewhere during app initialization (before creation of
// MyAudioReaderSource is just an example, replace with your own class name and constructor Recorder.InputFactory = (rec) => new MyAudioReaderSource();
- As long as client is connected to a voice room and
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.SamplingRateproperty of your custom audio source instance (e.g.
Second approach: data stream is driven by producer
ToneAudioPusher in "AudioUtil.cs" is a sample of this approach.
- In this case it may be more convenient to implement
Photon.Voice.IAudioPusherinterface instead. e.g.
MyAudioPusherSource. You need to implement
IAudioPusher.SetCallbackmethod only which mainly stores given callback.
Factoryin editor (or in code).
Create an instance of your class somewhere during app initialization (before creation of PhotonVoiceRecorder):
// MyAudioPusherSource is just an example, replace with your own class name and constructor Recorder.InputFactory = (rec) => new MyAudioPusherSource();
- During streaming, you simply call the callback set using
IAudioPusher.SetCallbackperiodically (e.g. from
MonoBehaviour.OnAudioFilterRead) with as many samples as you have. Photon Voice will do all buffering work for you.
Do you have special offers for students, hobbyists or indies?
All our products have a free tier and a one-off entry-plan. We also usually take part in Unity's asset store sales and occasionally give vouchers to lucky ones.
Can I combine more than one 100 CCU plan for a single Photon application?
No. The 100 CCU plans are not stackable and can be applied only once per AppId. If you purchase multiple PUN+ asset seats then you must redeem each 100 free CCU for a separate AppId. If you need more CCU for a single app, the next higher plan is the 500 CCU one. If you subscribe to a monthly or yearly plan, then you will still keep the 100 CCUs for 60 months on top of / in addition to the CCU from your monthly/yearly plan.