Photon Unity Networking: Public API

Photon Unity Networking

Photon Unity Networking  v1.91
Public API

Groups the most important classes that you need to understand early on. More...

Classes

interface  IPunObservable
 Defines the OnPhotonSerializeView method to make it easy to implement correctly for observable scripts. More...
 
interface  IPunCallbacks
 This interface is used as definition of all callback methods of PUN, except OnPhotonSerializeView. Preferably, implement them individually. More...
 
class  Photon.PunBehaviour
 This class provides a .photonView and all callbacks/events that PUN can call. Override the events/methods you want to use. More...
 
struct  PhotonMessageInfo
 Container class for info about a particular message, RPC or update. More...
 
class  PhotonStream
 This container is used in OnPhotonSerializeView() to either provide incoming data of a PhotonView or for you to provide it. More...
 
class  PhotonNetwork
 The main class to use the PhotonNetwork plugin. This class is static. More...
 
class  PhotonPlayer
 Summarizes a "player" within a room, identified (in that room) by actorID. More...
 
class  PhotonView
 PUN's NetworkView replacement class for networking. Use it like a NetworkView. More...
 
class  Room
 This class resembles a room that PUN joins (or joined). The properties are settable as opposed to those of a RoomInfo and you can close or hide "your" room. More...
 
class  RoomInfo
 A simplified room with just the info required to list and join, used for the room listing in the lobby. The properties are not settable (open, MaxPlayers, etc). More...
 

Enumerations

enum  PhotonNetworkingMessage {
  PhotonNetworkingMessage.OnConnectedToPhoton, PhotonNetworkingMessage.OnLeftRoom, PhotonNetworkingMessage.OnMasterClientSwitched, PhotonNetworkingMessage.OnPhotonCreateRoomFailed,
  PhotonNetworkingMessage.OnPhotonJoinRoomFailed, PhotonNetworkingMessage.OnCreatedRoom, PhotonNetworkingMessage.OnJoinedLobby, PhotonNetworkingMessage.OnLeftLobby,
  PhotonNetworkingMessage.OnDisconnectedFromPhoton, PhotonNetworkingMessage.OnConnectionFail, PhotonNetworkingMessage.OnFailedToConnectToPhoton, PhotonNetworkingMessage.OnReceivedRoomListUpdate,
  PhotonNetworkingMessage.OnJoinedRoom, PhotonNetworkingMessage.OnPhotonPlayerConnected, PhotonNetworkingMessage.OnPhotonPlayerDisconnected, PhotonNetworkingMessage.OnPhotonRandomJoinFailed,
  PhotonNetworkingMessage.OnConnectedToMaster, PhotonNetworkingMessage.OnPhotonSerializeView, PhotonNetworkingMessage.OnPhotonInstantiate, PhotonNetworkingMessage.OnPhotonMaxCccuReached,
  PhotonNetworkingMessage.OnPhotonCustomRoomPropertiesChanged, PhotonNetworkingMessage.OnPhotonPlayerPropertiesChanged, PhotonNetworkingMessage.OnUpdatedFriendList, PhotonNetworkingMessage.OnCustomAuthenticationFailed,
  PhotonNetworkingMessage.OnCustomAuthenticationResponse, PhotonNetworkingMessage.OnWebRpcResponse, PhotonNetworkingMessage.OnOwnershipRequest, PhotonNetworkingMessage.OnLobbyStatisticsUpdate,
  PhotonNetworkingMessage.OnPhotonPlayerActivityChanged, PhotonNetworkingMessage.OnOwnershipTransfered
}
 This enum defines the set of MonoMessages Photon Unity Networking is using as callbacks. Implemented by PunBehaviour. More...
 
enum  PhotonLogLevel { PhotonLogLevel.ErrorsOnly, PhotonLogLevel.Informational, PhotonLogLevel.Full }
 Used to define the level of logging output created by the PUN classes. Either log errors, info (some more) or full. More...
 
enum  PhotonTargets {
  PhotonTargets.All, PhotonTargets.Others, PhotonTargets.MasterClient, PhotonTargets.AllBuffered,
  PhotonTargets.OthersBuffered, PhotonTargets.AllViaServer, PhotonTargets.AllBufferedViaServer
}
 Enum of "target" options for RPCs. These define which remote clients get your RPC call. More...
 
enum  ClientState {
  ClientState.Uninitialized, ClientState.PeerCreated, ClientState.Queued, ClientState.Authenticated,
  ClientState.JoinedLobby, ClientState.DisconnectingFromMasterserver, ClientState.ConnectingToGameserver, ClientState.ConnectedToGameserver,
  ClientState.Joining, ClientState.Joined, ClientState.Leaving, ClientState.DisconnectingFromGameserver,
  ClientState.ConnectingToMasterserver, ClientState.QueuedComingFromGameserver, ClientState.Disconnecting, ClientState.Disconnected,
  ClientState.ConnectedToMaster, ClientState.ConnectingToNameServer, ClientState.ConnectedToNameServer, ClientState.DisconnectingFromNameServer,
  ClientState.Authenticating
}
 Detailed connection / networking peer state. PUN implements a loadbalancing and authentication workflow "behind the scenes", so some states will automatically advance to some follow up state. Those states are commented with "(will-change)". More...
 
enum  DisconnectCause {
  DisconnectCause.DisconnectByServerUserLimit = StatusCode.DisconnectByServerUserLimit, DisconnectCause.ExceptionOnConnect = StatusCode.ExceptionOnConnect, DisconnectCause.DisconnectByServerTimeout = StatusCode.DisconnectByServer, DisconnectCause.DisconnectByServerLogic = StatusCode.DisconnectByServerLogic,
  DisconnectCause.Exception = StatusCode.Exception, DisconnectCause.InvalidAuthentication = ErrorCode.InvalidAuthentication, DisconnectCause.MaxCcuReached = ErrorCode.MaxCcuReached, DisconnectCause.InvalidRegion = ErrorCode.InvalidRegion,
  DisconnectCause.SecurityExceptionOnConnect = StatusCode.SecurityExceptionOnConnect, DisconnectCause.DisconnectByClientTimeout = StatusCode.TimeoutDisconnect, DisconnectCause.InternalReceiveException = StatusCode.ExceptionOnReceive, DisconnectCause.AuthenticationTicketExpired = 32753
}
 Summarizes the cause for a disconnect. Used in: OnConnectionFail and OnFailedToConnectToPhoton. More...
 

Functions

void IPunObservable.OnPhotonSerializeView (PhotonStream stream, PhotonMessageInfo info)
 Called by PUN several times per second, so that your script can write and read synchronization data for the PhotonView. More...
 

Detailed Description

Groups the most important classes that you need to understand early on.

Enumeration Type Documentation

Detailed connection / networking peer state. PUN implements a loadbalancing and authentication workflow "behind the scenes", so some states will automatically advance to some follow up state. Those states are commented with "(will-change)".

Enumerator
Uninitialized 

Not running. Only set before initialization and first use.

PeerCreated 

Created and available to connect.

Queued 

Not used at the moment.

Authenticated 

The application is authenticated. PUN usually joins the lobby now.

(will-change) Unless AutoJoinLobby is false.

JoinedLobby 

Client is in the lobby of the Master Server and gets room listings.

Use Join, Create or JoinRandom to get into a room to play.

DisconnectingFromMasterserver 

Disconnecting.

(will-change)

ConnectingToGameserver 

Connecting to game server (to join/create a room and play).

(will-change)

ConnectedToGameserver 

Similar to Connected state but on game server. Still in process to join/create room.

(will-change)

Joining 

In process to join/create room (on game server).

(will-change)

Joined 

Final state of a room join/create sequence. This client can now exchange events / call RPCs with other clients.

Leaving 

Leaving a room.

(will-change)

DisconnectingFromGameserver 

Workflow is leaving the game server and will re-connect to the master server.

(will-change)

ConnectingToMasterserver 

Workflow is connected to master server and will establish encryption and authenticate your app.

(will-change)

QueuedComingFromGameserver 

Same Queued but coming from game server.

(will-change)

Disconnecting 

PUN is disconnecting. This leads to Disconnected.

(will-change)

Disconnected 

No connection is setup, ready to connect. Similar to PeerCreated.

ConnectedToMaster 

Final state for connecting to master without joining the lobby (AutoJoinLobby is false).

ConnectingToNameServer 

Client connects to the NameServer. This process includes low level connecting and setting up encryption. When done, state becomes ConnectedToNameServer.

ConnectedToNameServer 

Client is connected to the NameServer and established enctryption already. You should call OpGetRegions or ConnectToRegionMaster.

DisconnectingFromNameServer 

When disconnecting from a Photon NameServer.

(will-change)

Authenticating 

When connecting to a Photon Server, this state is intermediate before you can call any operations.

(will-change)

Summarizes the cause for a disconnect. Used in: OnConnectionFail and OnFailedToConnectToPhoton.

Extracted from the status codes from ExitGames.Client.Photon.StatusCode.

See also
PhotonNetworkingMessage
Enumerator
DisconnectByServerUserLimit 

Server actively disconnected this client. Possible cause: The server's user limit was hit and client was forced to disconnect (on connect).

ExceptionOnConnect 

Connection could not be established. Possible cause: Local server not running.

DisconnectByServerTimeout 

Timeout disconnect by server (which decided an ACK was missing for too long).

DisconnectByServerLogic 

Server actively disconnected this client. Possible cause: Server's send buffer full (too much data for client).

Exception 

Some exception caused the connection to close.

InvalidAuthentication 

(32767) The Photon Cloud rejected the sent AppId. Check your Dashboard and make sure the AppId you use is complete and correct.

MaxCcuReached 

(32757) Authorization on the Photon Cloud failed because the concurrent users (CCU) limit of the app's subscription is reached.

InvalidRegion 

(32756) Authorization on the Photon Cloud failed because the app's subscription does not allow to use a particular region's server.

SecurityExceptionOnConnect 

The security settings for client or server don't allow a connection (see remarks).

A common cause for this is that browser clients read a "crossdomain" file from the server. If that file is unavailable or not configured to let the client connect, this exception is thrown. Photon usually provides this crossdomain file for Unity. If it fails, read: https://doc.photonengine.com/en-us/onpremise/current/operations/policy-files

DisconnectByClientTimeout 

Timeout disconnect by client (which decided an ACK was missing for too long).

InternalReceiveException 

Exception in the receive-loop. Possible cause: Socket failure.

AuthenticationTicketExpired 

(32753) The Authentication ticket expired. Handle this by connecting again (which includes an authenticate to get a fresh ticket).

Used to define the level of logging output created by the PUN classes. Either log errors, info (some more) or full.

Enumerator
ErrorsOnly 

Show only errors. Minimal output. Note: Some might be "runtime errors" which you have to expect.

Informational 

Logs some of the workflow, calls and results.

Full 

Every available log call gets into the console/log. Only use for debugging.

This enum defines the set of MonoMessages Photon Unity Networking is using as callbacks. Implemented by PunBehaviour.

Much like "Update()" in Unity, PUN will call methods in specific situations. Often, these methods are triggered when network operations complete (example: when joining a room).

All those methods are defined and described in this enum and implemented by PunBehaviour (which makes it easy to implement them as override).

Each entry is the name of such a method and the description tells you when it gets used by PUN.

Make sure to read the remarks per entry as some methods have optional parameters.

Enumerator
OnConnectedToPhoton 

Called when the initial connection got established but before you can use the server. OnJoinedLobby() or OnConnectedToMaster() are called when PUN is ready.

This callback is only useful to detect if the server can be reached at all (technically). Most often, it's enough to implement OnFailedToConnectToPhoton() and OnDisconnectedFromPhoton().

OnJoinedLobby() or OnConnectedToMaster() are called when PUN is ready.

When this is called, the low level connection is established and PUN will send your AppId, the user, etc in the background. This is not called for transitions from the masterserver to game servers.

Example: void OnConnectedToPhoton() { ... }

OnLeftRoom 

Called when the local user/client left a room.

When leaving a room, PUN brings you back to the Master Server. Before you can use lobbies and join or create rooms, OnJoinedLobby() or OnConnectedToMaster() will get called again.

Example: void OnLeftRoom() { ... }

OnMasterClientSwitched 

Called after switching to a new MasterClient when the current one leaves.

This is not called when this client enters a room. The former MasterClient is still in the player list when this method get called.

Example: void OnMasterClientSwitched(PhotonPlayer newMasterClient) { ... }

OnPhotonCreateRoomFailed 

Called when a CreateRoom() call failed. Optional parameters provide ErrorCode and message.

Most likely because the room name is already in use (some other client was faster than you). PUN logs some info if the PhotonNetwork.logLevel is >= PhotonLogLevel.Informational.

Example: void OnPhotonCreateRoomFailed() { ... }

Example: void OnPhotonCreateRoomFailed(object[] codeAndMsg) { // codeAndMsg[0] is short ErrorCode. codeAndMsg[1] is string debug msg. }

OnPhotonJoinRoomFailed 

Called when a JoinRoom() call failed. Optional parameters provide ErrorCode and message.

Most likely error is that the room does not exist or the room is full (some other client was faster than you). PUN logs some info if the PhotonNetwork.logLevel is >= PhotonLogLevel.Informational.

Example: void OnPhotonJoinRoomFailed() { ... }

Example: void OnPhotonJoinRoomFailed(object[] codeAndMsg) { // codeAndMsg[0] is short ErrorCode. codeAndMsg[1] is string debug msg. }

OnCreatedRoom 

Called when this client created a room and entered it. OnJoinedRoom() will be called as well.

This callback is only called on the client which created a room (see PhotonNetwork.CreateRoom).

As any client might close (or drop connection) anytime, there is a chance that the creator of a room does not execute OnCreatedRoom.

If you need specific room properties or a "start signal", it is safer to implement OnMasterClientSwitched() and to make the new MasterClient check the room's state.

Example: void OnCreatedRoom() { ... }

OnJoinedLobby 

Called on entering a lobby on the Master Server. The actual room-list updates will call OnReceivedRoomListUpdate().

Note: When PhotonNetwork.autoJoinLobby is false, OnConnectedToMaster() will be called and the room list won't become available.

While in the lobby, the roomlist is automatically updated in fixed intervals (which you can't modify). The room list gets available when OnReceivedRoomListUpdate() gets called after OnJoinedLobby().

Example: void OnJoinedLobby() { ... }

OnLeftLobby 

Called after leaving a lobby.

When you leave a lobby, CreateRoom and JoinRandomRoom automatically refer to the default lobby.

Example: void OnLeftLobby() { ... }

OnDisconnectedFromPhoton 

Called after disconnecting from the Photon server.

In some cases, other callbacks are called before OnDisconnectedFromPhoton is called. Examples: OnConnectionFail() and OnFailedToConnectToPhoton().

Example: void OnDisconnectedFromPhoton() { ... }

OnConnectionFail 

Called when something causes the connection to fail (after it was established), followed by a call to OnDisconnectedFromPhoton().

If the server could not be reached in the first place, OnFailedToConnectToPhoton is called instead. The reason for the error is provided as StatusCode.

Example: void OnConnectionFail(DisconnectCause cause) { ... }

OnFailedToConnectToPhoton 

Called if a connect call to the Photon server failed before the connection was established, followed by a call to OnDisconnectedFromPhoton().

OnConnectionFail only gets called when a connection to a Photon server was established in the first place.

Example: void OnFailedToConnectToPhoton(DisconnectCause cause) { ... }

OnReceivedRoomListUpdate 

Called for any update of the room-listing while in a lobby (PhotonNetwork.insideLobby) on the Master Server or when a response is received for PhotonNetwork.GetCustomRoomList().

PUN provides the list of rooms by PhotonNetwork.GetRoomList().
Each item is a RoomInfo which might include custom properties (provided you defined those as lobby-listed when creating a room).

Not all types of lobbies provide a listing of rooms to the client. Some are silent and specialized for server-side matchmaking.

Example: void OnReceivedRoomListUpdate() { ... }

OnJoinedRoom 

Called when entering a room (by creating or joining it). Called on all clients (including the Master Client).

This method is commonly used to instantiate player characters. If a match has to be started "actively", you can instead call an PunRPC triggered by a user's button-press or a timer.

When this is called, you can usually already access the existing players in the room via PhotonNetwork.playerList. Also, all custom properties should be already available as Room.customProperties. Check Room.playerCount to find out if enough players are in the room to start playing.

Example: void OnJoinedRoom() { ... }

OnPhotonPlayerConnected 

Called when a remote player entered the room. This PhotonPlayer is already added to the playerlist at this time.

If your game starts with a certain number of players, this callback can be useful to check the Room.playerCount and find out if you can start.

Example: void OnPhotonPlayerConnected(PhotonPlayer newPlayer) { ... }

OnPhotonPlayerDisconnected 

Called when a remote player left the room. This PhotonPlayer is already removed from the playerlist at this time.

When your client calls PhotonNetwork.leaveRoom, PUN will call this method on the remaining clients. When a remote client drops connection or gets closed, this callback gets executed. after a timeout of several seconds.

Example: void OnPhotonPlayerDisconnected(PhotonPlayer otherPlayer) { ... }

OnPhotonRandomJoinFailed 

Called after a JoinRandom() call failed. Optional parameters provide ErrorCode and message.

Most likely all rooms are full or no rooms are available. When using multiple lobbies (via JoinLobby or TypedLobby), another lobby might have more/fitting rooms. PUN logs some info if the PhotonNetwork.logLevel is >= PhotonLogLevel.Informational.

Example: void OnPhotonRandomJoinFailed() { ... }

Example: void OnPhotonRandomJoinFailed(object[] codeAndMsg) { // codeAndMsg[0] is short ErrorCode. codeAndMsg[1] is string debug msg. }

OnConnectedToMaster 

Called after the connection to the master is established and authenticated but only when PhotonNetwork.autoJoinLobby is false.

If you set PhotonNetwork.autoJoinLobby to true, OnJoinedLobby() will be called instead of this.

You can join rooms and create them even without being in a lobby. The default lobby is used in that case. The list of available rooms won't become available unless you join a lobby via PhotonNetwork.joinLobby.

Example: void OnConnectedToMaster() { ... }

OnPhotonSerializeView 

Implement to customize the data a PhotonView regularly synchronizes. Called every 'network-update' when observed by PhotonView.

This method will be called in scripts that are assigned as Observed component of a PhotonView. PhotonNetwork.sendRateOnSerialize affects how often this method is called. PhotonNetwork.sendRate affects how often packages are sent by this client.

Implementing this method, you can customize which data a PhotonView regularly synchronizes. Your code defines what is being sent (content) and how your data is used by receiving clients.

Unlike other callbacks, OnPhotonSerializeView only gets called when it is assigned to a PhotonView as PhotonView.observed script.

To make use of this method, the PhotonStream is essential. It will be in "writing" mode" on the client that controls a PhotonView (PhotonStream.isWriting == true) and in "reading mode" on the remote clients that just receive that the controlling client sends.

If you skip writing any value into the stream, PUN will skip the update. Used carefully, this can conserve bandwidth and messages (which have a limit per room/second).

Note that OnPhotonSerializeView is not called on remote clients when the sender does not send any update. This can't be used as "x-times per second Update()".

Example: void OnPhotonSerializeView(PhotonStream stream, PhotonMessageInfo info) { ... }

OnPhotonInstantiate 

Called on all scripts on a GameObject (and children) that have been Instantiated using PhotonNetwork.Instantiate.

PhotonMessageInfo parameter provides info about who created the object and when (based off PhotonNetworking.time).

Example: void OnPhotonInstantiate(PhotonMessageInfo info) { ... }

OnPhotonMaxCccuReached 

Because the concurrent user limit was (temporarily) reached, this client is rejected by the server and disconnecting.

When this happens, the user might try again later. You can't create or join rooms in OnPhotonMaxCcuReached(), cause the client will be disconnecting. You can raise the CCU limits with a new license (when you host yourself) or extended subscription (when using the Photon Cloud). The Photon Cloud will mail you when the CCU limit was reached. This is also visible in the Dashboard (webpage).

Example: void OnPhotonMaxCccuReached() { ... }

OnPhotonCustomRoomPropertiesChanged 

Called when a room's custom properties changed. The propertiesThatChanged contains all that was set via Room.SetCustomProperties.

Since v1.25 this method has one parameter: Hashtable propertiesThatChanged. Changing properties must be done by Room.SetCustomProperties, which causes this callback locally, too.

Example: void OnPhotonCustomRoomPropertiesChanged(Hashtable propertiesThatChanged) { ... }

OnPhotonPlayerPropertiesChanged 

Called when custom player-properties are changed. Player and the changed properties are passed as object[].

Since v1.25 this method has one parameter: object[] playerAndUpdatedProps, which contains two entries.
[0] is the affected PhotonPlayer.
[1] is the Hashtable of properties that changed.

We are using a object[] due to limitations of Unity's GameObject.SendMessage (which has only one optional parameter).

Changing properties must be done by PhotonPlayer.SetCustomProperties, which causes this callback locally, too.

Example:

    void OnPhotonPlayerPropertiesChanged(object[] playerAndUpdatedProps) {
        PhotonPlayer player = playerAndUpdatedProps[0] as PhotonPlayer;
        Hashtable props = playerAndUpdatedProps[1] as Hashtable;
        //...
    }
OnUpdatedFriendList 

Called when the server sent the response to a FindFriends request and updated PhotonNetwork.Friends.

The friends list is available as PhotonNetwork.Friends, listing name, online state and the room a user is in (if any).

Example: void OnUpdatedFriendList() { ... }

OnCustomAuthenticationFailed 

Called when the custom authentication failed. Followed by disconnect!

Custom Authentication can fail due to user-input, bad tokens/secrets. If authentication is successful, this method is not called. Implement OnJoinedLobby() or OnConnectedToMaster() (as usual).

During development of a game, it might also fail due to wrong configuration on the server side. In those cases, logging the debugMessage is very important.

Unless you setup a custom authentication service for your app (in the Dashboard), this won't be called!

Example: void OnCustomAuthenticationFailed(string debugMessage) { ... }

OnCustomAuthenticationResponse 

Called when your Custom Authentication service responds with additional data.

Custom Authentication services can include some custom data in their response. When present, that data is made available in this callback as Dictionary. While the keys of your data have to be strings, the values can be either string or a number (in Json). You need to make extra sure, that the value type is the one you expect. Numbers become (currently) int64.

Example: void OnCustomAuthenticationResponse(Dictionary<string, object> data) { ... }

https://doc.photonengine.com/en-us/pun/current/connection-and-authentication/custom-authentication

OnWebRpcResponse 

Called by PUN when the response to a WebRPC is available. See PhotonNetwork.WebRPC.

Important: The response.ReturnCode is 0 if Photon was able to reach your web-service. The content of the response is what your web-service sent. You can create a WebResponse instance from it. Example: WebRpcResponse webResponse = new WebRpcResponse(operationResponse);

Please note: Class OperationResponse is in a namespace which needs to be "used": using ExitGames.Client.Photon; // includes OperationResponse (and other classes)

The OperationResponse.ReturnCode by Photon is: 0 for "OK" -3 for "Web-Service not configured" (see Dashboard / WebHooks) -5 for "Web-Service does now have RPC path/name" (at least for Azure)

Example: void OnWebRpcResponse(OperationResponse response) { ... }

OnOwnershipRequest 

Called when another player requests ownership of a PhotonView from you (the current owner).

The parameter viewAndPlayer contains:

PhotonView view = viewAndPlayer[0] as PhotonView;

PhotonPlayer requestingPlayer = viewAndPlayer[1] as PhotonPlayer;

void OnOwnershipRequest(object[] viewAndPlayer) {} //

OnLobbyStatisticsUpdate 

Called when the Master Server sent an update for the Lobby Statistics, updating PhotonNetwork.LobbyStatistics.

This callback has two preconditions: EnableLobbyStatistics must be set to true, before this client connects. And the client has to be connected to the Master Server, which is providing the info about lobbies.

OnPhotonPlayerActivityChanged 

Called when a remote Photon Player activity changed. This will be called ONLY is PlayerTtl is greater then 0.

Use 0. If true, the player is not gett...">PhotonPlayer.IsInactive to check the current activity state

Example: void OnPhotonPlayerActivityChanged(PhotonPlayer otherPlayer) {...}

This callback has precondition: PlayerTtl must be greater then 0

OnOwnershipTransfered 

Called when a PhotonView Owner is transfered to a Player.

The parameter viewAndPlayers contains:

PhotonView view = viewAndPlayers[0] as PhotonView;

PhotonPlayer newOwner = viewAndPlayers[1] as PhotonPlayer;

PhotonPlayer oldOwner = viewAndPlayers[2] as PhotonPlayer;

void OnOwnershipTransfered(object[] viewAndPlayers) {} //

Enum of "target" options for RPCs. These define which remote clients get your RPC call.

Enumerator
All 

Sends the RPC to everyone else and executes it immediately on this client. Player who join later will not execute this RPC.

Others 

Sends the RPC to everyone else. This client does not execute the RPC. Player who join later will not execute this RPC.

MasterClient 

Sends the RPC to MasterClient only. Careful: The MasterClient might disconnect before it executes the RPC and that might cause dropped RPCs.

AllBuffered 

Sends the RPC to everyone else and executes it immediately on this client. New players get the RPC when they join as it's buffered (until this client leaves).

OthersBuffered 

Sends the RPC to everyone. This client does not execute the RPC. New players get the RPC when they join as it's buffered (until this client leaves).

AllViaServer 

Sends the RPC to everyone (including this client) through the server.

This client executes the RPC like any other when it received it from the server. Benefit: The server's order of sending the RPCs is the same on all clients.

AllBufferedViaServer 

Sends the RPC to everyone (including this client) through the server and buffers it for players joining later.

This client executes the RPC like any other when it received it from the server. Benefit: The server's order of sending the RPCs is the same on all clients.

Function Documentation

void IPunObservable.OnPhotonSerializeView ( PhotonStream  stream,
PhotonMessageInfo  info 
)

Called by PUN several times per second, so that your script can write and read synchronization data for the PhotonView.

This method will be called in scripts that are assigned as Observed component of a PhotonView.
PhotonNetwork.sendRateOnSerialize affects how often this method is called.
PhotonNetwork.sendRate affects how often packages are sent by this client.

Implementing this method, you can customize which data a PhotonView regularly synchronizes. Your code defines what is being sent (content) and how your data is used by receiving clients.

Unlike other callbacks, OnPhotonSerializeView only gets called when it is assigned to a PhotonView as PhotonView.observed script.

To make use of this method, the PhotonStream is essential. It will be in "writing" mode" on the client that controls a PhotonView (PhotonStream.isWriting == true) and in "reading mode" on the remote clients that just receive that the controlling client sends.

If you skip writing any value into the stream, PUN will skip the update. Used carefully, this can conserve bandwidth and messages (which have a limit per room/second).

Note that OnPhotonSerializeView is not called on remote clients when the sender does not send any update. This can't be used as "x-times per second Update()".

Implemented in PhotonAnimatorView, PhotonTransformView, PhotonRigidbody2DView, and PhotonRigidbodyView.

Online Documentation  -  Dashboard  -  Support Forum Exit Games GmbH