123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141 |
-
- namespace Photon.Pun
- {
- using UnityEngine;
- using Photon.Realtime;
- /// <summary>Defines the OnPhotonSerializeView method to make it easy to implement correctly for observable scripts.</summary>
- /// \ingroup callbacks
- public interface IPunObservable
- {
- /// <summary>
- /// Called by PUN several times per second, so that your script can write and read synchronization data for the PhotonView.
- /// </summary>
- /// <remarks>
- /// This method will be called in scripts that are assigned as Observed component of a PhotonView.<br/>
- /// PhotonNetwork.SerializationRate affects how often this method is called.<br/>
- /// PhotonNetwork.SendRate affects how often packages are sent by this client.<br/>
- ///
- /// 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, <i>OnPhotonSerializeView only gets called when it is assigned
- /// to a PhotonView</i> 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()".
- /// </remarks>
- /// \ingroup publicApi
- void OnPhotonSerializeView(PhotonStream stream, PhotonMessageInfo info);
- }
- /// <summary>
- /// Global Callback interface for ownership changes. These callbacks will fire for changes to ANY PhotonView that changes.
- /// Consider using IOnPhotonViewControllerChange for callbacks from a specific PhotonView.
- /// </summary>
- public interface IPunOwnershipCallbacks
- {
- /// <summary>
- /// Called when another player requests ownership of a PhotonView.
- /// Called on all clients, so check if (targetView.IsMine) or (targetView.Owner == PhotonNetwork.LocalPlayer)
- /// to determine if a targetView.TransferOwnership(requestingPlayer) response should be given.
- /// </summary>
- /// <remarks>
- /// The parameter viewAndPlayer contains:
- ///
- /// PhotonView view = viewAndPlayer[0] as PhotonView;
- ///
- /// Player requestingPlayer = viewAndPlayer[1] as Player;
- /// </remarks>
- /// <param name="targetView">PhotonView for which ownership gets requested.</param>
- /// <param name="requestingPlayer">Player who requests ownership.</param>
- void OnOwnershipRequest(PhotonView targetView, Player requestingPlayer);
- /// <summary>
- /// Called when ownership of a PhotonView is transfered to another player.
- /// </summary>
- /// <remarks>
- /// The parameter viewAndPlayers contains:
- ///
- /// PhotonView view = viewAndPlayers[0] as PhotonView;
- ///
- /// Player newOwner = viewAndPlayers[1] as Player;
- ///
- /// Player oldOwner = viewAndPlayers[2] as Player;
- /// </remarks>
- /// <example>void OnOwnershipTransfered(object[] viewAndPlayers) {} //</example>
- /// <param name="targetView">PhotonView for which ownership changed.</param>
- /// <param name="previousOwner">Player who was the previous owner (or null, if none).</param>
- void OnOwnershipTransfered(PhotonView targetView, Player previousOwner);
-
- /// <summary>
- /// Called when an Ownership Request fails for objects with "takeover" setting.
- /// </summary>
- /// <remarks>
- /// Each request asks to take ownership from a specific controlling player. This can fail if anyone
- /// else took over ownership briefly before the request arrived.
- /// </remarks>
- /// <param name="targetView"></param>
- /// <param name="senderOfFailedRequest"></param>
- void OnOwnershipTransferFailed(PhotonView targetView, Player senderOfFailedRequest);
- }
- /// \ingroup callbacks
- public interface IPunInstantiateMagicCallback
- {
- void OnPhotonInstantiate(PhotonMessageInfo info);
- }
- /// <summary>
- /// Defines an interface for object pooling, used in PhotonNetwork.Instantiate and PhotonNetwork.Destroy.
- /// </summary>
- /// <remarks>
- /// To apply your custom IPunPrefabPool, set PhotonNetwork.PrefabPool.
- ///
- /// The pool has to return a valid, disabled GameObject when PUN calls Instantiate.
- /// Also, the position and rotation must be applied.
- ///
- /// Note that Awake and Start are only called once by Unity, so scripts on re-used GameObjects
- /// should make use of OnEnable and or OnDisable. When OnEnable gets called, the PhotonView
- /// is already updated to the new values.
- ///
- /// To be able to enable a GameObject, Instantiate must return an inactive object.
- ///
- /// Before PUN "destroys" GameObjects, it will disable them.
- ///
- /// If a component implements IPunInstantiateMagicCallback, PUN will call OnPhotonInstantiate
- /// when the networked object gets instantiated. If no components implement this on a prefab,
- /// PUN will optimize the instantiation and no longer looks up IPunInstantiateMagicCallback
- /// via GetComponents.
- /// </remarks>
- public interface IPunPrefabPool
- {
- /// <summary>
- /// Called to get an instance of a prefab. Must return valid, disabled GameObject with PhotonView.
- /// </summary>
- /// <param name="prefabId">The id of this prefab.</param>
- /// <param name="position">The position for the instance.</param>
- /// <param name="rotation">The rotation for the instance.</param>
- /// <returns>A disabled instance to use by PUN or null if the prefabId is unknown.</returns>
- GameObject Instantiate(string prefabId, Vector3 position, Quaternion rotation);
- /// <summary>
- /// Called to destroy (or just return) the instance of a prefab. It's disabled and the pool may reset and cache it for later use in Instantiate.
- /// </summary>
- /// <remarks>
- /// A pool needs some way to find out which type of GameObject got returned via Destroy().
- /// It could be a tag, name, a component or anything similar.
- /// </remarks>
- /// <param name="gameObject">The instance to destroy.</param>
- void Destroy(GameObject gameObject);
- }
- }
|