Photon Unity Networking Get it. No server setup needed - runs in the Photon Cloud. No obligation due to free plan. Download from the Asset Store: http://u3d.as/2ey Overview This package implements Unity's well known networking API on top of Photon. Keeping the API simple, this gives you standalone, dedicated servers, fixes, tweaks and ongoing support. This "plugin" contains a setup wizard, the fully integrated API, Editor extensions and the client library. It's compatible with the Photon Cloud Service, so you don't even have to setup a server! Requirements Unity v4.7 or up. Export to Standalone, Web, Win 8.1 Store, Win 8.1 Phone, UWP and more. Unity 5 exports PUN Free also to Android and iOS. Unity 4 exports to Android and iOS with the PUN+ package or "Unity Pro" licenses for mobile. Server Options Photon Cloud Service: www.photonengine.com/en/Realtime Free for 20 concurrent users. Photon Standalone server: www.photonengine.com/en-US/OnPremise/Download Free 100 concurrent users (CCU) license. Registration required. v1.75 (23. August 2016) Fixed: The Photon assemblies (.dll) to support IPv6 correctly again. This was broken temporarily in v1.74. Fixed: UWP assembly. It now contains Photon's Hashtable, as all other libraries do. This fixes Windows 10 UWP exports. Changed: PhotonMessageInfo is now a struct (was a class). This is less garbage to collect. Changed: Demo script "ColorPerPlayer" to use less resources. When entering a room, it ignores property-changes until an initial check is done "on join". Changed: Internally, the ServerSettings class now contains a VoiceAppId field. This allows easier merging with PUN Voice. Changed: Internally, OnSerializeRead() now re-uses a stream object and just applies new, incoming values to it. This saves a bit of garbage. Fixed: Compatibility with Unity 5.4, where OnLevelWasLoaded is obsolete and SceneManagement.SceneManager.sceneLoaded should be used to register "on loaded" callbacks. Updated: To Photon assemblies v22.214.171.124. v1.74 (15. August 2016) Fixed: PUN+ is now compatible with Unity 4.x Free again and can export to iOS and Android as expected. If you have Unity 5.x or 4.x Mobile Pro, you were not affected. Fixed: TCP Socket for Windows Store 8.1 and UWP. Changed: Due to upcoming new encryption options, exports now must use API Compatibility Level ".Net 2.0" instead of ".Net 2.0 Subset". We hope this is a minor issue. Let us know if not. Note: When the Bytecode Stripper fails, see the note above about Compatibility Level. Added: Optimization if a observed component implements IPunObservable. If so, we use a shortcut to call OnPhotonSerializeView(). This can speed up observed component calling in PhotonViews. Fixed: NetworkingPeer.HandleEventLeave() inactive state missing masterClient assignement during first leave call (A second leave call will be made after playerTtl expires). Improved: DemoChat : Exposed FriendsList to the inspector to prevent hardcoded friends references, and allow for easier testing without code modification Fixed: PhotonEditor.cs: Pun+ plugins libs paths discovery. For Unity 4.7.2, the wizard window detect PUN+ correctly again. Internal: Changed the workflow for setting up protocols. One method aggregates this now. Internal: NetworkingPeer.SetupProtocol(). Gets called before each PhotonPeer.Connect(). Changed: PhotonNetwork constructor no longer sets protocols for special cases. Updated: The IPhotonSocket implementations to set their "IPv6-resolved" state. Updated: To new library build with new internal workflow for the "Init Request". Improved: PhotonPlayer.cs: Implemented IComparable and IEquatable. Fixed: NetworkingPeer.cs: Check for null view before adding view's GameObject. Fixed: Room.ClearExpectedUsers() is now sending it's current, local "expected users" to update the server with "CAS" (Check and Swap). This gives the client an update when the values become valid (which updates the local cache after the roundtrip). Added: link.xml file to preserve some classes from being stripped. This is in Assets\Photon Unity Networking\. Changed: The name/string of the "OnPhotonInstantiate" callback is now cached once, instead of using enum.ToString() each time. This is a minor performance improvement. Changed: The initial Dictionary size used in a PhotonView. This stores the the observed components and their methods to call. Fixed: Compatibility with Unity 5.4 by not adding a MonoBehaviour as Component. Instead, a derived class is used. v1.73 (11. July 2016) Fixed: NetworkingPeer.RunViewUpdate(), which was sending messages, even if no new updates were written. This got introduced in v1.70 and caused more messages than necessary. Changed: Some variable and field names. PeerState is now ClientState. Renamed: mAppId is now simply AppId. mAppVersion is now AppVersion. Renamed: networkingPeer.server is now networkingPeer.Server (uppercase, being public). Replaced: Most checks of PhotonNetwork.connectionStateDetailed being PeerState.Joined (or not) with checking PhotonNetwork.inRoom. Added: Regions to the PhotonServerSettings: "sa" South America (Sao Paulo), "usw" USA West (San José) and "cae" Canada East (Montreal). If you're using the "Best Region" setting, make sure to include/exclude them as needed. Fixed: NetworkingPeer:SendMonoMessage() null check before sendmessage to a GameObject that could be null. PunTurnManager API: Changed: GetRemainingSeconds() becomes .RemainingSecondsInTurn Changed: TurnDuration is now a float and defaults to 20 Added: IsOver() properly implemented Added: OnTurnTimeEnds interface callback properly implemented Fixed: RpsCore edited to account for PunTurnManager api changes and additions. Release History All updates are detailed in the changelog.txt in the package. Download Asset Store Special thanks go to Jean, Vadim, Leepo, Hamza and Olli for their great work, feedback and support. Thanks also to Caitlyn and team for getting this live incredibly fast Upcoming Support for more platforms, more useful components and lighter networking. Known Issues When you load a new scene, all instantiated GameObjects are destroyed only locally but not on the server. Anyone who joins the room later on still creates those GOs. To work around this, PhotonNetwork.Destroy your instantiated game objects before loading a new scene. Or use: PhotonNetwork.RemoveAllInstantiatedObjects(player). Changing the group of a PhotonView is only done locally and not synced. If you Instantiate a new object in a group that wasn't subscribed first, then the local client won't create the GameObject (it is culled by Interest Group). When you use multiple scenes, the viewIDs of PhotonViews in those scenes will always start at 1. Edit the PunSceneSettingsFile in your project to enter a minimum ViewID per scene if needed. Feedback is welcome! Just reply here. This post will be edited over time with more info, updates, etc.