Bolt SDK & Release History
Getting the Bolt SDK
Photon Bolt is released into two editions:
Only available directly through us to select customers. Access to SDK via subscription.
- Direct IP connection without Photon Cloud;
- Dedicated Servers/Custom Setups;
- Turnkey orchestration via zeuz.io;
Free On Asset Store
- All connections mediated via Photon Cloud;
- No manual direct connection (has punchthrough capabilities);
- Photon Cloud CCU pricing.
- Minimum Unity 2017.4.x;
- Tested up to 2018.2.16f1;
- Beta versions are not recommended.
- Visual Studio 2017 (recommended);
- JetBrains Rider.
- Microsoft Windows 10;
- Mac OS X.
- Microsoft Windows;
- MacOS X;
Photon Bolt SDK is distributed as an Unity Package, that can be imported directly into an Unity Project. The current files and folders included in the SDK:
Assets/bolt: main SDK folder, contains all Bolt content and binaries.
Assets/bolt/assemblies: contains all DLLs files.
Assets/bolt/packages: internal unity packages with extra content used to install all SDK dependencies and samples.
Assets/bolt/resources: consist of a list of images, icons, and objects necessary during the usage of Bolt.
Assets/bolt/scenes: currently accomodate the
BoltDebugScene.unityused by Bolt Scenes, a debugging feature.
Assets/bolt/scripts: have some utility and bridge scripts that make part of the integration of Bolt with the Unity Editor.
Assets/bolt/release_history.txt: describes a Change Log of Bolt updates.
Assets/bolt/project.bytes: consists of all custom assets created for the projects, like Commands and Events.
Assets/Gizmos: hold some Gizmos used to mark Bolt Entities on Scenes.
Assets/Plugins: extra plugins used by the SDK.
If the latest release is not shown here, check within Bolt package for
Fixed: Connect Token null on the host when using Accept Mode Manual.
Fixed: Issues with Bolt IDs when using Unity 2018.3 with the new Prefabs Workflow.
Fixed: DLLs naming collisions.
Fixed: Exception in Debug Start
Fixed: Initial position issue
Fixed: Samples are now compatible with both Unity 2017 and 2018
Fixed: Bolt Wizard shows current App ID correctly
Fixed: Exception in A2SManager when restarting Bolt server
Fixed: Issue on UI when running Client using BoltInit
Fixed: Failed Punch not fallback to Relay connection
Changed: Public API Naming. Several methods and functions were refactored to agree with the C# Coding Guidelines. The old symbols are still present, but with a obsolete marking and will be removed in a future version.
Changed: Semantic versioning (1.2.4 instead of 188.8.131.52)
Added: Command can now be marked as Instant. This forces immediate execution of all its inputs upon reaching server.
Added: Optional Enable Frame Limit for command. This allows to queue only one input per command per frame, preventing speed hacks.
Added: Delta Compression for command inputs and results.
Added: Link to license terms
Removed: Custom Hosted (On Premises Photon Server) is no longer supported
Fixed: Update Photon session info (token or properties) after room creation
Fixed: Single Player mode
Fixed: MaxConnection session property always 0
Fixed: Use BoltLog in all debug messages
Changed: Steam sample are now available only on the Bolt Samples repository
Added: Property names are now generated into BoltAssets class
Added: Support to create new AppIds directly from Wizard Window using just an email
Added: Best Region support when connecting to Photon Cloud
Added: Single player sample script
Added: Getting Started Sample
Added: Exposed Photon Room timeout settings (create and join)
Fixed: BoltLauncher selecting the wrong UdpPlatform on Bolt initialization.
Fixed: Bolt Wizard window popup on Play Mode.
Fixed: Bolt naming and version labels.
Fixed: Text coloring on Bolt Wizard window when using Unity Pro.
Fixed: Bolt Single player.
Fixed: Bolt Builds for Android.
Fixed: Bolt Debug Start.
Fixed: BoltInit script and MainMenu scene.
Added: Support to China region when connecting to Photon Cloud.
Added: Headless Server sample.
Fixed: .NET 4.x issue when dealing with Bolt Assets.
Fixed: Issues with IL2CPP using .NET 4.0.
Fixed: LanBroadcast using PhotonPlatform.
Fixed: General refactoring on Photon services to improve reliability and performance.
Fixed: Maintain connection with Photon cloud even when the game is paused.
Fixed: Support mobile platforms: Android and iOS.
Fixed: MaxConnection when using PhotonPlatform to use the general Bolt Settings.
Changed: Incorporation of all Photon related code to internal DLLs.
Changed: Exposed session type when listing all available sessions from Bolt.
Added: New Wizard window with basic steps to get Bolt running.
Added: Bolt setting for enabling Client Metrics.
Fixed: Assembly load errors with various thirdparty non-bolt dlls.
Fixed: Some non-Bolt .DLL files would be confused with Bolt .DLL files causing errors.
Fixed: Fixed issue with registering a bolt shutdown callback after BoltStartFailed occured.
Fixed: NullReferenceException that would happen when sending an event to a specific connection if that connection was disconnected.
Fixed: Bolt will now check for duplicate asset name during compilation and log an error if duplicates were detected.
Fixed: Steam Lobby sample.
Added: Exposed BoltConnection.DisconnectReason so user code can inspect the reason a connection was disconnected.
Changed: If an exception is thrown by internal code during event dispatch it's now logged which event caused the exception to make it easier to track down.
Changed: Exception for missing to register a protocol token and then trying to use it now also shows when Bolt runs in release mode.
Fixed: Latency Simulation.
Fixed: Scene async load.
Fixed: Sample game "Level1" scene.
Added: Exposed connection stats from Bolt Connection by type (States, Events and Commands).
Fixed: Debug start for Unity 2018.
Fixed: Exception when LoadBalancingClient is destroyed while joining and Bolt is shutdown.
Fixed: Inactive GameObject with Animators attached were showing warnings messages about calling of animator functions.
Fixed: BoltStartFailed callback doesn't work.
Fixed: Some Property types do not display correct arrow for expanded/collapsed properties.
Fixed: SetServerInfo() throws a NullReferenceException when called inside BoltStartDone() callback.
Fixed: SetServerInfo() being called but BoltNetwork.SessionList stays at 0.
Fixed: Error on macOS when using Experimental Scripting Runtime Version (.Net 4.6 Equivalent) and NAT punchthrough enabled.
Fixed: Building for macOS targets are invalid while attempting to test server/clients using DebutStart.
Added: Exposed the current progress of async scene loading in currentAsyncOperation.
Added: Lobby Manager example to be used with Photon platform. It's possible to create, list and join rooms.
Added: Missing Regions for Photon Cloud.
Added: Scroll panel for Bolt Welcome Window. This is useful when dealing with small screens.
Changed: Updated API naming related to the use of "Host" and "Server" names. All references that uses "Host" were replaced with a "Server" version.
Removed: RegisterShutdownDoneCallback (dead code that never did anything).
Fixed: Old DLL files from internal udpkit library replaced to latest version.
Fixed: Removed hardcoded configuration from Photon Cloud integration with Bolt for PunchThrough.
Changed: Implemented IEquatable<> for structs to avoid boxing costs and memory allocations, specifically when in Dictionaries
Fixed: Per tick memory allocation in FreezeProxies with a cached List <>
Changed: IBoltListNode to IBoltListNode, removed the implementation from BoltObject, implemented it on everything that needed it and removed casts in the lists that are no longer needed
Added: Options for querying IEntityBehaviour, IReplicationFilter, and IPriorityFilter as global options as well as allowing per-prefab overrides
Changed: Reversed the QueryComponentOptions to have global options that can be overridden by prefabs on a per-prefab basis. This is cleaner.
Added: New PunchThrough code using the Photon Servers as relay. This removes the need of Zeus.
Removed: Zeus support and settings.
Fixed: Miscellaneous Photon Cloud improvements and fixes
Fixed: Quaternion state property with smoothing
Changed: iOS Xcode improvements
Fixed: Removed JS files to keep compliance with Unity 2017.2
Added: New "Welcome" experience and installer.
Added: BoltNetwork.SetNetworkSimulation method to change the loss/ping simulation localy on one device.
Fixed: Issue with events sometimes being re-used too early.
Fixed: Issue with smoothing of quaternion properties
Fixed: Header text for inspectors should now be readable in the Unity light skin.
Fixed: Console being toggled on any key when "None" was selected as the toggle key.
Fixed: Issue with the float number formatting in the Bolt compiler on Unity 2017 under certain cultures causing compilation errors.
Changed: "Instantiate Mode" setting has been revamped, you can now
select between "Per Prefab", "Server Only" and "Everyone".
Fixed: 2017.1 compatibility
Changed: Samples moved into separate package within main package
Fixed: Photon Cloud reliability and improvements
Added: Server Monitor sample
Fixed: Photon Cloud NativePlatform issue
Added: Photon Cloud support for tokens (see Photon Cloud doc for details)
Removed: Network arrays of transforms
Changed: Internal improvements
Fixed: Issue for Photon Cloud on mobile platforms
Fixed: Warnings for samples
Added: Included support for Photon Cloud and Photon Server
Changed: Replaced Zeus master-server settings by the new Photon settings
Changed: Bolt internals for relay and matchmaking
Fixed: Bolt installation will no longer delete console integrations
Fixed: State.SetTransforms (transform,null) will no longer cause an error
Added: Bolt Swarm SDK
Added: PositionAtFrame which returns the position of a Bolt hitbox at a given frame
Fixed: Issue with Bolt assets not saving
Changed: Smoothing for quarternion result smoothing temporarily disabled
Changed: Improvements for Bolt samples
Fixed: Event issue introduced in last release
Fixed: Hitbox issue introduced in last release
Fixed: Issue for Unity 5.4 on OSX
Fixed: Render transform
Fixed: Miscellaneous sample fixes
Added: New Samples (3rd person sample client and server auth, click to move server auth)
Changed: XLM Serialization
Changed: Miscellaneous optimizations
Fixed: Issue with correction interpolation for commands pooling and initial values compression
Fixed: Improvements to Bolt physics for lag compensation
Fixed: Bolt will now import properly when upgrading or switching tween debug and release mode
Fixed: Will no longer lose Global Illumination on Bolt scene load
Fixed: iOS improvements
Fixed: Entities instantiating at wrong position
Fixed: Zeus not updating lobby count when clients connect (was only on disconnect)
Fixed: Command correction interpolation for Vector3 and Quaternion, and exposed SnapMagnitude in the editor UI
Added: Smoothing for floats
Fixed: Bolt will no longer delete Steam integration files when installing Bolt
Fixed: Entity Events will no longer be discarded when Bolt is not under load
Fixed: Bolt log issue
Fixed: Excessive acks for steaming bytes
Fixed: State property triggers
Changed: ShutDownImmediate now works so the behvaiour is consistent with a non-immediate shutdown
Added: New Entity function: RemoveAllCallbacks
Added: New API Docs http://doc-api.photonengine.com/en/bolt/current/index.html
Fixed: Bolt Scenes errors due to Unity 5.3
Fixed: UPNP Button
Fixed: Control tokens
Fixed: Help button doc links
Added: Check to make sure you have installed for the current Bolt you are using
Fixed: Zeus punchthough issue resolved
Changed: Removed Pro dependency for async level loading
Added: API for adding C# delegates as event callbacks
Fixed: IL2CPP, relevant to iOS and tvOS
Fixed: BoltInit.cs was out of date
Added: MainMenu scene with BoltInit.cs included with package
Fixed: Bolt will no longer call methods on disabled scripts
Fixed: Bolt will now default to the new Zeus development master server
Fixed: A couple of entity settings were missing from the new UI, they are now back
Fixed: Spelling error in the bolt settings window
Fixed: Bolt will now automatically save the current scene when you click "edit" in Bolt Scenes
Added: You can now select replication mode + mecanim mode when importing a mecanim state
Added: Added .isControllerOrOwner to BoltEntity
Removed: Removed the .mdb files
Changed: Improved the performance of SetDynamic and GetDynamic substantially.
Changed: Added proper error reporting to SetDynamic if property queried for does not exist.
Changed: Deprecated NetworkTransform.SetTransforms, see: IState.SetTransforms and NetworkTransform.ChangeTransforms.
Changed: Any errors thrown inside Bolt will now always be logged to unitys Debug.LogException no matter if Bolt is in debug mode or if you have 'Unity' logging enbled in Bolt. Changed: BoltNetwork.Destroy can now be used when Bolt is not running, it will simply destroy the object normally using Unity's GameObject.Destroy.
Added: TrySetDynamic and TryGetDynamic that does not log errors if properties dont exists, but instead return a bool true/false.
Added: Added IState.SetTransforms to replace NetworkTransform.SetTransforms, this new methods works around the issue of position snapping for entities when their position updates are delayed.
Added: NetworkTransform.ChangeTransform to replace the previous NetworkTransform.SetTransforms for changing the transform target for interpolation after it's been set once.
Added: IState.ForceTransform that lets you over-write all currently received position and rotation values of a transform completely, this is usefull for working around issue #242 when loosing control of an entity and its position will snap back, you can now force it to stay at the correct location in world until proper position updates arrive.
Added: Bolt.EntityTargets.OnlyControllerAndOwner event target.
Added: BoltEntity.isControlled property.
Added: BoltEntityExtensions which contains extensions method for IsAttached, IsOwner, IsControlled, IsSceneObject, IsFrozen and HasControl the methods properly handle the case where Bolt is not running, the entity is null or detached without throwing exceptions.
Fixed: GitHub Issue #224 (see: IState.SetTransforms, NetworkTransform.ChangeTransform)
Fixed: GitHub Issue #243
Fixed: GitHub Issue #259
Fixed: Issue causing servers to disconnect from Zeus after a specific interval was resolved.
Added: Bolt Release build to the package. It's a unitypackage in Assets\bolt-release folder. If you want only the release build, please unpack into an empty project and then import the .unitypackage where needed.
Note: This version is just a re-packaging of 0.4.3.5 to add the Release build. No new features.
Fixed: Entities getting frozen on clients after 10 seconds.
Fixed: Int compression not being applied.
Fixed: Delay on Zeus session list request after re-connecting.
Fixed: ZeusDisconnected callback not being invoked if Zeus times out.
Fixed: Issue with setting Animator to null causing crashes.
Fixed: Issue with array properties not properly checking if the value actually changed before flagging a value for re-sending.
Fixed: Issue with entity inspector not showing debug values.
Fixed: Some smaller performance issues related to garbage generated in various places in code.
Improved the performance of the initial scene object search algorithm.
Fixed: Entity event unreliability issues where too many events would get discarded.
Fixed: Debug Start will now respect 64 bit windows build settings.
Fixed: Control of an entity will now be handed over properly in all circumstances.
Fixed: ‘Proxy When Frozen’ should now work properly.
Fixed: RemoveCallback will now work properly.
Added: New settings on the Bolt Entity component called ‘Detach Parent On Disconnect’ which if enabled automatically finds nested entities and de-parents them when the parent is detached.
Added: New overloads to BoltLauncher.StartServer which takes a scene name as last parameter for a scene that will automatically loaded when server has started.
Added: New method called BoltNetwork.PreLoadPrefabDb() which can be called as soon as the game starts to limit the lag spike that happens when starting Bolt.
Bolt.IEntityReplicationFilter that allows you direct boolean control over if an entity should be written into a packet or not.
Added: Added the ability to pick between local and world transform replication.
Added: You can now create
IProtocolToken properties on events.
ReadBoltEntity extension methods for
UdpPacket to easily write/read
BoltEntity objects in
IProtocolToken Read/Write method.
Added: Added support for
Added: Two new Global callbacks exist
EntityThawed for handling entities being frozen/thawed on a global level.
Fixed: Disconnect tokens are now available on the
ProtocolToken passed into
BoltNetwork.Attached is not replaced by null by mistake anymore.
Fixed: Resolved interpolation issues for properties on Commands.
Fixed: The issues with connecting through Zeus should be solved.
Fixed: Resolved several issues in related to nesting Bolt entities during run-time and Bolt callback methods such as
BoltPhysicsHit now contains the approximate distance between the hitbox and sphere overlap origin instead of -Infinity.
Changed: Changed the way priority is accumulated for entities to give smoother data delivery.
Changed: Changed the editor layout of the ‘Bolt Entity’ script on game objects.
Added: Added two new settings on the Bolt Entity component, ‘Detach on disable’ allows you to disable the default Bolt behavior of detaching entities when their game object was disabled. The second property called ‘Allow Replicate When Frozen’ allows you to have entities perform their initial replication(s) to clients even when frozen.
Fixed: You can now only register 254 token classes instead of the previous 255, which would let you register a ‘zero’ value.
Fixed: A performance issue that would happen with a lot of entities active due to
BoltEntity having an
Update() method has been resolved.
Fixed: Most issues with
BoltEntity.SetParent has been fixed, there are a couple of smaller lingering ones left which will be fixed during the 0.4.3.x release cycle.
Changed: The internal concept of a ‘Server’ in Bolt is being re-named to ‘host’ to differentiate it from the ‘Zeus Server’, some APIs have been marked as deprecated and been replaced with ‘HostXYZ’ versions instead.
Changed: Updated the font and colors of the Bolt console.
Changed: Cleaned up large parts of the internal UdpKit API, this should not affect any public APIs but if you were compiling Bolt from source with your own changes UdpKit has been majorly re-worked internally.
Breaking: Most of the old and deprecated APIs have been removed, including the
Modify() syntax for states and the “using (var ev …)” syntax for events.
Breaking: Most method overloads which receives a
Bolt.IProtocolToken for connections and entities have been removed, you can now instead access the following tokens directly on the
BoltEntity objects instead:
This means that you have access to the protocol tokens for connections and entities at all times.
BoltShutdown callbacks have been removed and replaced with the following ones:
You can call the delegate passed into
BoltShutdownBeginand register your own callbacks which will be fired when Bolt has shutdown properly.
Breaking: The way Bolt runs it start-up and shutdown sequences have been completely re-worked, you can now call Shutdown/Start back-to-back and it will be handled properly. The new start-up sequence is completely asynchronous and happens in the background. You know if the start-up succeeded or failed based on the
RegisterStreamChannels callback has been removed, you should now register the stream channels in the
BoltStartBegin callback. You should also register any
Bolt.IProtocolToken classes in the same spot.
Breaking: The method signatures of
ConnectAttempt have all been normalized, they now all take both an
UdpKit.UdpEndPoint and a
Bolt.IProtocolToken as their parameters.
SessionConnectFailed has been changed to always take a
Bolt.IProtocolToken as the second parameter.
IState.GetDynamic for transform properties.
Fixed: Resolved an issue which would cause a crash on Android with byte code stripping.
Fixed: Frozen entities can now be destroyed properly.
Fixed: Controller state of entities will replicate properly for frozen entities.
Fixed: Added #pragma ignore for obsolete warning in BoltConsoleWriter.cs
Changed: Re-ordered the ‘New Event’ and ‘New Command’ options in the ‘Bolt Assets’ right click window.
Added: You can now press Ctrl+Enter to compile Bolt if you are focusing any of the ‘Bolt’ windows in the Unity editor.
Fixed: Resolved an issue where the LAN broadcasting would return an incorrect port for the host.
Fixed: An issue causing compilation errors on Windows under .NET2.0 Subset has been fixed.
Fixed: Issue where entities being nested during runtime would cause issues when shutting down Bolt.
Fixed: Frozen entities don’t exist in a twilight-zone anymore where some methods would not work on them.
Fixed: Bolt will no longer send already corrected command results, in earlier versions this could happen in edge cases with a lot of lag.
Fixed: When installing a fresh version of Bolt a proper game id will be generated for Zeus.
Changed: The default name of mecanim layers imported into a state is now ‘MecanimLayerNWeight’
Changed: Bolt will now automatically disconnect from Zeus when shutdown.
Changed: Commands, States and Events will now recycle the backing data structure used for storing all values, leading to a lot less GC pressure.
BoltNetwork.maxConnections now returns ‘0’ when in running bolt in single player and -1 when Bolt is not started.
Changed: When a client connects to a game it will now automatically disconnect from Zeus.
Added: Preview of Windows Phone 8 Support.
Added: New property
BoltNetwork.IsSinglePlayer which lets you check if bolt is running in single player mode.
Added: New overload to
BoltLauncher.Shutdown() which lets you pass in true/false if you want to wait for socket shutdown.
BoltConnection.ScopedTo is a new property that contains all entities that are currently scoped to a specific connection.
BoltConnection.SourceOf is a new property that contains all entities received from this connection.
BoltConnection.ExistsOnRemote is a new method which lets you query if an entity exists on the remote end of a connection or not, possible return values are: No, Yes, Maybe.
BoltConnection.HasControlOf which is a list of the entities this connection is controlling currently.
Zeus.IsConnected which lets you query if you are connected to Zeus or not.
Zeus.ClientsInZeus properties which contain the current counts of peers for each category.
Zeus.RequestInfo() which lets you request an update to
Fixed: Resolved an issue in the default round-robin priority calculator which would cause to incorrectly prioritize some objects.
Fixed: Resolved an issue where using ‘Manual’ prefab mode would cause Bolt to think that normally instantiated prefabs were scene objects.
Fixed: An issue where property indexes for states would take up too much space has been fixed, this should lower bandwidth usage substantially for everyone.
Fixed: The mecanim import functionality on state assets will now properly import mecanim layers again.
Fixed: Could not connect to a session that was received over LAN Broadcasting.
Fixed: A bug which would cause the
IProtocolToken to not get sent when connecting to a
Fixed: An issue where extrapolation of quaternions will sometimes start spitting out (NaN, NaN, NaN, NaN) results.
Fixed: The ‘Bolt Assets’ window will now properly respond to Cmd/Ctrl+LeftClick on OS X to open the right click menu.
Added: ‘Collapse All’/’Expand All’ for all properties in an asset.
Added: A duplicate button is now available for assets in the Bolt Editor window.
Changed: DebugInfo dialog will now display more information about the entity and state.
Breaking Change: The
IPriorityCalculator.Always property has been removed, it was not being utilized internally.
Added: You can now select ‘Strict Comparison’ for transform, vector and quaternion properties which works around the ‘loose’ equality that Unity implements by default.
Added: You can now specify ‘Auto Freeze Frames’ on each entity, which allows you tell Bolt to automatically freeze a proxy of an entity if it has not received any update for that amount of frames.
Added: There is a new menu option at ‘Window/Bolt/Prefabs’ for editing the prefab database when in ‘Manual’ mode (see the ‘Changed’ line below).
Changed: Prefab mode can now be set to ‘Automatic Scan’, ‘Manual Scan’ and ‘Manual’ where you can manually edit the prefab database.
Changed: Entities which are frozen will automatically be thawed when they receive a state update.
Fixed: Frozen entities will now receive events and can be found through
Fixed: Hosts will now properly update the current/max connection values of their session to Zeus.
BoltLauncher.Shutdown now returns the correct ManualResetEvent Value.
Fixed: The headers in the ‘Bolt Settings’ window have the correct backgrounds.
Fixed: Resolved an issue where
Environment.StackTrace would cause issues when called in weird places.
Added: The in-game debug info window will now display layers, animation clips and weights for the active Animator.
IProtocolToken can now be sent together with
Added: There is a new setting in the ‘Bolt Settings’ which lets you disable the default behavior which overrides
Time.timeScale to 1.0f.
Added: You can now call
BoltScenes.AddScene to dynamically add scenes to the Bolt scene loader during runtime.
Added: New overload for
BoltLauncher.Shutdown which takes an System.Action delegate that will be invoked once Bolt has finished shutting down is now available.
Added: A new callback called ‘BoltStartFailed’ is now available, this will be invoked if Bolt fails to start or bind the socket, after this callback has been invoked Bolt will automatically shut down.
Changed: The confirm-delete dialog for assets and properties will now list both the name and type of item you are deleting.
Changed: Several internal classes which were previously public have been made internal.
Changed: New properties added to states/objects will now default to the ‘Everyone’ replication setting.
Changed: The ‘Window/Bolt Engine/…’ menu has been renamed to ‘Window/Bolt/…’.
Breaking Change: The ‘MissingCommand’ callback now does not let you queue new commands, instead it assumes you execute any replacement logic inside of the callback itself. You will still get the last (if any) received command passed in as a reference.
Breaking Change: The ‘BoltStarted’ callback will now happen once the socket is fully started and bound, instead of right after the StartServer, StartClient and StartSinglePlayer call returns.
Fixed: Interpolation issue for floats where they would always come out as zero on remote peers is resolved.
Fixed: On transform properties position and rotation axes which are set to not sync will no longer be-overwritten with zeros.
Fixed: On transform properties if position or rotation is completely disabled Bolt will let you control them locally for each peer.
Fixed: Fixed several issues relating to Zeus and connectivity to remote hosts.
Fixed: An issue that would cause the networking thread to lock up when calling
Zeus.Disconnect() has been fixed.
Changed: In the GUI the replication setting for a property previous called ‘Only Owner’ and then ‘Local’ is gotten its final name: ‘Local For Each Player’.
Added: If you enable interpolation for floats you can now set it to interpolate as an angle instead of regular interpolation.
Added: If you enable compression on floats, ints or vectors their values will be clamped to the min/max compression values.
BoltNetwork.SetDedicatedServerInfo to complement
BoltNetwork.SetHostInfo, if you use
SetDedicatedServerInfo both Bolt and Zeus will assume that the server has correct port-forwarding setup and will never attempt NAT-punchthrough to it.
Added: You can now access the LAN, WAN and Socket bound endpoints through
Fixed: Several issues with WebPlayer builds have been resolved.
Added: BoltLauncher.StartSinglePlayer() is now available for starting Bolt in non-networked mode.
This is the first release of Bolt which has a binary Unity 5 release.
Fixed: An issue where
UdpKit.Protocol.ProbeFeatures would be sent forever from the client to Zeus.
Fixed: Several issues on Android when communicating with the Zeus server should now be solved.
Added: UdpIpv4Address now exposes a Broadcast property which contains the generic 255.255.255.255 broadcast address.
Added: Detection of LAN address now works properly.
GetProtocolToken() extension method on
UdpSession is now in the global namespace, no need to import it with “using Bolt;” anymore.
Changed: The Build.fsx script has been changed to support Unity 5.
Fixed: SessionListUpdated callback will now be invoked even if there are no new sessions available.
Fixed: Bolt will now correctly handle an incorrect Game Id or Zeus EndPoint.
Fixed: Errors received from Zeus will now be printed in the Bolt Console.
UdpSession.WanEndPoint object will now hold the correct endpoint instead of 0.0.0.0:0
Added: You can now get the protocol token of a UdpSession with the
Changed: All ‘MasterServer’ methods were removed from BoltNetwork. Use the new ‘Bolt.Zeus’ class to Connect, Disconnect and retrieve the session list with RequestSessionList.
Changed: Renamed all MasterServer methods on
Bolt.GlobalEventListener to ‘Zeus’ instead.
Removed: Removed the ‘automatic’ session list request upon connection to Zeus, you have to always manually call
Fixed: Several issues with Android and iOS should now be resolved.
Fixed: Issue with trigges invoking the incorrect callback fixed.
Fixed: Issue where some properties would not be synced on first connect is solved.
Changed: The in-game debug info now also shows the name of the Animator component in use.
Changed: BoltLauncher.Shutdown now returns a ‘ManualResetEvent’ you can wait on until the shutdown is complete.
UdpKit.UdpIPv4Address now exposes several properties that lets you check if it’s a LAN, WAN, Broadcast or Localhost IP address.
BoltNetwork.UdpSocket lets you get the low level UdpSocket object used by Bolt.
Added: You can now manually set the UdpPlatform to use with BoltLauncher.SetUdpPlatform.
Added: All bolt arrays now implement the
Removed: The ‘accept token size’ setting has been removed (this setting was not used anywhere in the code).
Feature: The master server (named Zeus) is now available.
This is the first real public release of the 0.4.x series of Bolt, mostly due to time constraints caused by starting up Bolt as a full time company over the fall. Before this release 0.4.x has only existed inside the GitHub repository, but from now on all releases will be done on the website.
There are a lot of changes from 0.3.x to 0.4.x and the first part of the release notes are for the broader 0.3.x to 0.4.x changes, while the second part is for the specific changes on 0.4.1.7.
0.3.x to 0.4.x changes
Changed: Revamped the entire asset system, you now use the ‘Bolt Assets’ window to define new assets for Bolt instead of the Unity Project View.
Changed: The entire replication engine has been rebuilt ground up to support more property types and very complex states.
Changed: Most of the public API of Bolt has moved into the Bolt namespace.
Changed: The entire editor UI has been re-done.
Feature: Support for PSVita and PlayStation 4.
Feature: Added support for attaching arbitrary user-data to most protocol level actions, by using the IProtocolToken interface, check the wiki for samples on this.
Fixed: Resolved the issue where rarely clients would report ‘Assigned Connection Id 0′ error when connecting to a server, and then getting disconnected.
Fixed: The UdpKit native sockets for iOS and Android will now respect the EINTR interrupt when doing a POSIX socket call.
Fixed: The font size in the console window will not be unreadable on high PPI devices anymore.
Fixed: Several issues relating to scene objects have been resolved.
Fixed: Fixed an issue where the ‘MissingCommand’ callback would stop the client from being able to send any more commands at all.
Fixed: Fixed an issue with an incorrect check if you were both owner and controller of an entity and tried to assign a state property.
Changed: Improved display of properties in arrays/nested objects in the in-game debug info dialog.
Changed: Most of the API has had all properties changed to ‘PascalCase’ from ‘camelCase’, the old ‘camelCase’ properties are still there but marked as obsolete.
Changed: The event ‘Raise’ method has been renamed to ‘Create’, the old ‘Raise’ method is still available but marked as obsolete.
Changed: Throttled the mecanim warnings Bolt would spit out if you had not assigned an Animator.
Changed: The ‘Only Owner’ replication mode has been renamed to ‘Local’.
Changed: Changed the editor UI for the ‘Bolt Entity’ component.
Changed: All references to the old ‘Structs’ concept from Bolt 0.4.0.x has been removed, all places now refer to ‘Objects’ instead.
Changed: Changed the way unreliable binary streams are sent to better handle real time data such as voice and video.
Changed: The in-game debug info will now use the mouse cursor instead of the middle of the screen for picking the entity to display debug info for.
Feature: Both ‘Global Senders’ and ‘Entity Senders’ can now be set to ‘None’ on events, which will stop Bolt from generating the methods associated with raising the event in that way.
Feature: Added a new ‘Help’ button on several places in the UI which takes you to an article on the Wiki about the subject, more of these will be added as development goes on.
Feature: Added a new option in ‘Bolt Settings’ to turn of the new ‘Help’ buttons.
Feature: Bolt will now ask the users to save the scene when switching scenes with the ‘Edit’ button in the ‘Bolt Scenes’ window.
Feature: Added support for
IProtocolToken properties no states.
Removed: Removed the different sorting methods for properties in the ‘Bolt Editor’ window as it was causing issues with the unity editor GUI functions.
BoltConsole.WriteReal method is now internal.
Fixed: Resolved a bug which would cause compilation to crash unity by loading too many assets.
Fixed: Bolt will no longer let non-owners destroy proxy objects.
Fixed: There is now a slight delay between the scene being done loading and Bolt invoking the callbacks, this should resolves several issues with objects being destroyed prematurely.
Changed: Build script has been updated to work better on OS X (again).
Changed: The BoltInit script now always uses the port from the debug settings.
Changed: The port used by the BoltInit script is now visible on Unity Free also.
Changed: All raycasting methods have been moved from BoltPhysics to BoltNetwork.
Changed: Default port is now 25000 instead of 40000.
Changed: The menu items have been re-arranged.
* Bolt/Compile is now located at Assets/Compile Bolt Assets.
* Bolt/Install is now located at Edit/Install Bolt.
Feature: Bolt now has alpha-level PlayStation 4 support.
Feature: BoltNetwork now exposes a property called globalObject which contains the Bolt global game object.
Fixed: The bolt compiler now correctly handles the same scene being added to the unity Build Settings twice.
Fixed: Fixed a bug with scene load which would cause clients who re-connected without restarting the application to not properly load the scene.
Fixed: Entities will no properly re-replicate over the wire after being out-of-scope after the first replication.
Fixed: Re-enabled file logging on desktop platforms and editor.
Fixed: Bolt will now correctly allow you to have “rogue” assemblies in your project without crashing during reflection.
Fixed: Remove the annoying Debug.Log messages in the mecanim reflection extensions.
Fixed: The property editors now display all properties correctly (no more missing fields).
Fixed: Bolt will no longer override your connection timeout settings in release mode.
Changed: The compiler does it best to convert prefab names and scene names to valid C# identifiers now.
Changed: Re-worked the naming of the properties on BoltEntity that lets you query ownership and control of an entity, the new solution which we will not change again is as follows:
isOwner– Returns true if this entity was instantiated on the current computer.
hasControl– Returns true if you have control over this entity.
All other properties, including
isProxyhave been removed.
Feature: You can now toggle network simulation with a checkbox from the ‘Bolt Settings’ window, allow you to save your simulation settings but playing without wiping them.
Feature: The max packet size is now configurable via the ‘Bolt Settings’ window, do not touch this if you are unsure of what it does, a higher number is not ‘better’ than a lower number, allowed values are 1024 – 4096 (1kb to 4kb).
Feature: Added the ability to toggle of the assembly checksum check, there’s a checkbox to the right of the checksum that disables it.
Feature: Bolt now comes with a brand new installer, after unpacking the package into your main project run Bolt/Install Bolt from the menu and Bolt takes care of the rest.
Fixed: Fixed several small bugs with the
BoltGlobalBehaviour attribute, it should now work properly in all different configurations.
Fixed: Resolved several issues with the Build.bat and Build.sh scripts, they should now work better on both Windows and OS X, there’s still more work to be done here but it’s getting better.
Fixed: The bolt compiler will not automatically open and focus the scene window when you compile Bolt anymore.
Fixed: Fixed a bug in the dead reckoning code which stopped it from working.
Fixed: Fixed a bug with entity destruction not replicating properly in all situations.
Fixed: Several issue with the new application identifier and assembly hash have been resolved.
Fixed: Resolved compilation issues for Web Player builds.
BoltMapNames has been deprecated.
BoltMapNames and is a public static class with const fields on it.
Changed: BoltPrefabs is now a static class with
const fields on it, instead of an
Changed: Map loading has been re-worked, in general it works the same way but the internal workings have been change to eliminate a bunch of subtle quirks. The callbacks for map loading have been changed and renamed to more clearly symbol what they do, the new callbacks are:
MapLoadLocalBegin(string map): Called when a map is begining to load locally
MapLoadLocalDone(string map): Called when a map is done loading locally
MapLoadRemoteDone(BoltConnection connection, string map): Called when a map is done loading on a remote computer, called for both the server on the clients and for all clients on the server.
Changed: Reworked the way BoltLog works, you can now implement your own class that inherits from
BoltLog.IWriter to provide custom logging functionality. Bolt comes with four default loggers: Unity Console, System Console, File and Bolt Console.
Changed: The window previously called ‘Bolt Connections’ has had it’s look and feel updated and is now called ‘Bolt Remotes’, more features will be added to this window in future updates.
Feature: Reworked the asset editor GUIs with a new style.
Feature: Bolt can now replicate mecanim layer weights, toggle the ‘Replicate Layer Weights’ checkbox on your Bolt mecanim asset to enable this.
Feature: Bolt provides new extension methods for mecanim for using Bolt with legacy mecanim code, they are found in the BoltMecanimReflectionExtensions class.
Feature: Added several new options for logging and the console to the ‘Bolt Settings’ window.
Feature: Bolt will now make sure that two peers connecting to each other are using the same application guid and that their bolt.user.dll assembly has the same hash value.
Feature: Bolt now allows you to use a session wide unique id for your entities, enable this by checking the ‘Use Unique Ids’ option in the ‘Bolt Settings’ window, each BoltEntity now exposes a property called ‘uniqueId’ which is gurantueed to always be unique. Find a BoltEntity by it’s unique id using
Feature: You can now set the instantiate and destroy functions bolt should use with the new SetInstantiateDestroyCallbacks method on the BoltNetwork class.
BoltNetwork.Connect has gotten a new parameter called “token”, this is a byte array of size of up to 768 which gets sent from the client to the server when it’s connecting, if you are using manual connection acception this allows you to inspect the token data before hand and do things such as user authentication and verification.
Feature: You can now disable Clients from being able to instantiate certain bolt entities, on the Bolt Entity component you can toggle this on and off on a per-prefab basis.
Fixed: Android projects should now compile properly again.
Fixed: iOS projects should not crash with an AOT/JIT error anymore.
Fixed: Compilation errors in the startupshutdown sample is gone.
Fixed: Quaternion properties should now replicate properly.
Fixed: You can now enable interpolation for Vector2, Vector3, Vector4 and Quaternion.
Fixed: unsigned 32 bit integers of 9-16 bits should now replicate properly.
Fixed: InScope should not crash anymore when you destroy an entity on the owner.
Fixed: Numerous other small quirks and bugs.
Changed: Bolt will now load less prefabs into memory while looking for entities and assets to compile, this should speed up compilation and allow for compilation of very large projects without any issue.
Changed: BoltMapAsset are gone, Bolt does not use the “Map” asset at all any more and instead just deals with scenes like Unity does.
Changed: BoltConfigAssets are gone, Configuration is now done through the new ‘Bolt Settings’ window which you find under Window/Bolt Settings.
Changed: BoltEditorSettings are gone, it has been merged into BoltRuntimeSettings.
Changed: BoltClearScene is gone, it is not required any more.
Changed: The ‘Map Launcher’ window has been renamed to ‘Bolt Scenes’. The auto-starter has been removed if you are using the free version of Unity. The BoltDebugNonPro scene is gone because of this.
Changed: BoltEntity has gotten four new properties to query the state of the entity, they are ment to replace the old isOwner, isProxy and isControlling.
BoltEntity.hasAuthority: is you have full authority over this entity or not.
BoltEntity.hasControl: if you can control this entity.
BoltEntity.spawnedRemotely: if this was spawned by someone else than you.
BoltEntity.isDummy: if you are neither authority or in control of this entity.
Changed: Android and iOS builds now always use native sockets. The native socket plugins will also install automatically when needed and the menu option for installing them is gone.
Changed: The UdpPlatformAndroid and UdpPlatformIOS have been merged into one class called UdpPlatformMobile.
Changed: The udpkit platform assemblies have been moved into the unity project at .cs files instead to once and for all rid any issues with compiling for different platforms.
Changed: Due to the growing size of the project, the source .zip has been removed from the main download package, we instead provide direct access to our private GitHub repository.
Feature: BoltConsole now exposes a properly called ‘writable’ which you can be set to false to stop the console from consuming so much CPU.
Feature: Bolt now allows you to accept/refuse a connection before it is established, set the Accept Mode property in the ‘Bolt Setttings’ window to manual. Override the ConnectRequest method on an object which inherits from BoltCallbacks, then call BoltNetwork.Accept or BoltNetwork.Refuse.
Feature: BoltEntityBehaviour now exposes a ControlGained/ControlLost callback methods which you can override.
Feature: Since you can no longer set a Server and Client object on the configuration asset (since its gone) we have added new functionality for having behaviours which instantiate with the server/client and specific maps. All you need to do is to mark any MonoBehaviour with the BoltGlobalBehaviourAttribute, you can then specify if you want it for the server and client – or both. You can also specify if it should only be created and available during a specific map. Check the sample projects in bolt/samples for examples.
Fixed: Mecanim parameters will not be set if the Animator component is disabled.
Fixed: Resolved exception thrown when a destroyed entity got a lost or delivered packet notifiication.
Fixed: Fixed an issue with the BoltConfig constructor which would cause unity to throw errors when access a configuration asset in Awake().
Fixed: Bolt will now correctly disconnect all connections when shutting down.
Fixed: Fixed several subtle quirks causing Shutdown to act differently depending on when it was called.
Changed: ShutdownDone has been removed from BoltCallbacks since it would never get called as all objects would be destroyed before the callback would fire, BoltNetwork now exposes a .NET event called “ShutdownComplete” which you can subscribe to. Note that after each invocation of the event it will clear it’s callbacks so you have to re-register them every time.
Sample: There’s a new sample in the bolts/samples/shutdownstartup folder which demonstrates a clean shutdown-startup cycle for both the client and server. To run it set up your build settings to that the scenes are in this order:
Run Bolt/Compile and then build the project like you normally would (not using the map launcher), and start as many instances as you want and connect them together.
Important: UdpKit source code is now included in the source package, note that this source code is under the same license as the rest of the Bolt package, it is not open source.
Fixed: The BoltDebugStartNonPro script will now correctly select the proper configuration file.
Fixed: Prefabs should no longer accidentaly be marked as Scene Objects.
Fixed: Resolved numerous issues in the native sockets code for mobile free users.
Fixed: Resolved an issue where uint32 and int32 values of 9-16 bits would not serialize correctly
Changed: Reworked the entire build system, it’s now a lot easier to build on both OS X and Windows. All build scripts and other tools are also bundled with Bolt now. The new system uses the F# FAKE build tool which allows for easier building of the entire project at once, run the Build.fsx script with FAKE. Requires Mono 3.4.x on OS X.
Feature: Local LAN/WiFi discovery is now available. A simple example is available in bolt/samples/lanbroadcast. The new methods available are:
BoltNetwork.EnableLanBroadcast(): Enables the lan broadcasting feature, call this on both the client and server.
BoltNetwork.DisableLanBroadcast(): Disables the lan broadcasting. When you connect to a server on the client this is called implicitly, on the server you have to call it yourself to stop broadcasting your session.
BoltNetwork.GetSessions(): Call on the client to get a list of sessions found on the local lan, note that this method allocates a new array every time you call it because the data comes from the UdpKit background thread.
BoltNetwork.SetSessionInfo(string serverName, string userData): Call on the server for setting a server name and custom data that is transmitted with it’s session broadcast, which can then be found on
UdpSession.UserData on the session structs returned from
GetSessions() on the client.
Feature: Two new overloads for
Raise(IBoltEvent evnt, IEnumerable connections) and
Raise(IBoltEvent evnt, params BoltConnection connections), this lets you raise a specific event on your own local machine and on the specified remote connections.
Fixed: Resolved an issue where the entity packer would sometimes throw an exception when you tried to teleport a character.
Fixed: The BoltDebugStart and BoltDebugStartNonPro scripts now correctly use the port you configured in the map launcher.
Fixed: The BoltDebugStart and BoltDebugStartNonPro scripts now correctly selects a proper configuration file.
Fixed: Resolved an issue where if you were rotating an entity and the delta value per frame was small enough the rotation would not replicate properly.
Fixed: BoltDebugStartNonPro will correctly handle if no map has been specified.
Fixed: Entity scoping now correctly takes into account where an entity originated from.
Fixed: When an entity is attached it will now be scoped right away for all connections, so that events can be sent to it directly after Attached() is done.
Fixed: BoltDefaultConfig is no longer linked to the ServerObject/ClientObject prefabs in one of the sample projects.
Fixed: Removed all dependencies on the sample projects.
Feature: Added a new method called “AttachedLate” on the BoltEntitySerializer class, you can override this method in your own serializer. The method will be called after all Attached() methods have been called on both the serializer and any entity behaviour, and after scoping of the entity has taken place.
Feature: Bolt will now display a warning in the Map Launcher if the “Run In Background” player setting is not enabled.
Fixed: Byte arrays now serialize properly.
Changed: The default space in the name of a new asset, ‘New State’ for example, has been removed.
Feature: You can now see the port the Map Launcher will try to use, and press “refresh” to get a new random port number.
Fixed: Bolt now properly asks you if you want to save the current scene before launching through the Map Launcher window.
Fixed: The Map Launcher should now work properly on Unity 4.5 on OS X.
Fixed: Debugging with breakpoints from Unity-MonoDevelop should now work properly, without either client or server crashing and with no timeouts. Tested on Unity 4.3.4f1 and 4.5.0 on both Windows and OS X. Note: If you are having problems with the editor or locking/crashing when you start with the debugger attached, try to attach the debugger from Mono Develop after the editor has started play mode completely.
BoltMecanimAnimator.CopyProperties has been removed as it served no purpose.
Removed: The configuration setting from the Map Launcher has been removed, if you want a specific configuration to your maps you should set it on the map asset itself instead.
Changed: The default connection timeout in debug mode is now 600 seconds (10 minutes), giving you a lot more time to debug before the client/server disconnects when one side is paused.
Changed: The origin of an entity is now replicated to all proxies also.
Changed: BoltEntity objects placed in the scene now attach in
Start() instead of
Awake() on the server
Changed: The BoltNetwork class now correctly exposes
Attach(BoltEntity entity) and
Detach(BoltEntity entity) for manually attaching/detaching an object from Bolt
Changed: The ‘invoking [event]’ message will now only be raised if the event is actually being received
Changed: Reduced the size of the package by converting textures from .tga to .jpeg
Feature: A new property type was added: Byte Array, this type can only be selected on events and allows you to send a normal byte array through an event, max length of array is 256.
Feature: The current version of Bolt is now displayed at the top of the Map Launcher window.
Feature: The current amount of assets requiring compilation is now displayed at the top of the Map Launcher window, with a ‘Compile’ button next to it
Feature: GNU/Linux support is now official, Bolt will now run properly in both normal and headless mode under GNU/Linux.
Feature: The BoltEntity component now has a setting called ‘Controller Prediction’ which should be on if you are using a controlling scheme which allows client side prediction and off if you’re not using client side prediction in your controller script. Note that this setting does not enable or disable client side prediction, it simply tells Bolt if this entity is or isn’t using client side prediction so that Bolt can adjust it’s internal state accordingly.
Feature: New sample with a third person character that can run around, get into cars, drive the cars and then get out of them. Other players can also stand on the cars while they drive around.
Fixed: Bolt will now properly save the current scene before starting through the Map Launcher.
Fixed: Default configuration doesn’t have 150ms simulated ping and 2% simulated packet loss anymore.
Fixed: Resolved a bug in the transform snapshot interpolator that would cause entities to stop updating their position when using a very low de-jitter delay and a specific timing occurred.
Fixed: Resolved a bug where you would sometimes execute the same command twice when you were controlling the an entity you were also the owner of.
Changed: Damping parameter on float properties on mecanim assets now use the built in damping functionality of mecanim instead of it’s own logic. This makes sure that animations replicated through Bolt produce the exact same result as animations played locally with mecanim.
Changed: Renamed the ‘Type’ setting in the event editor to ‘Target’, so it’s not confused with the ‘Type’ setting for properties.
Changed: Corrected the name of the file BoltGUII.cs to BoltGUI.cs
Changed: Non-state assets will not let you select the “Custom” property type anymore, as they are only supported in ‘State’ assets.
BoltRingBuffer<T> now implements
Feature: The BoltNetwork class now exposes a ‘serverTime’ property which on the server returns the local frame count translated to seconds. On clients it returns the estimated server frame translated to seconds.
Feature: The BoltEntity class now exposes a method called
SetOrigin(Transform origin), this method allows you to set the origin transform of an entity. Bolt requires the transform to be mapped to an integer value for serialization over the network, by default Bolt allows you to add a BoltOrigin component to your transform and then assign it a unique id. If you don’t want to use the BoltOrigin component and prefer to do the tansform to id mapping yourself you can set the two callbacks available on BoltNetwork called resolveTransform and resolveTransformId. See the new sample called ‘TeleportAndElevators” found in bolt/samples.
Fixed: TutorialPlayerMotor.cs script now correctly applies gravity to the character.
Fixed: Compiler can now handle paths with space characters in them.
Fixed: Disabling the built-in transform or mecanim properties in the state editor will not disable the rest of the properties below them anymore.
Fixed: The BoltNetwork class now correctly exposes the
Destroy(GameObject go) and
Destroy(BoltEntity entity) methods.
Fixed: Queueing an unreliable event that was raised on the server to all connected clients should now work properly.
Changed: Renamed several labels of settings in the state editor. ‘Mode’ on each property is now called ‘Sync When’. The ‘Once’ option on ‘Sync When’ is now called ‘Once On Init’. ‘Notify’ is now called ‘Changed Callback’, ‘Smooth Time’ on mecanim float properties are now called ‘Damping’, ‘Smooth’ in Float, Vector2, Vector3, Vector4 and Quaternion properties is now called ‘Interpolate’.
Changed: Removed the ability to accidentaly create new properties of the transform, mecanim and trigger types. This would break the state asset making it unusable.
Changed: All methods in the BoltStateTransformDeadReckoning and BoltStateTransformInterpolatedSnapshots are now public/protected and virtual to allow for easier extension of the classes.
Changed: All internal fields and properties in the BoltStateTransformDeadReckoning, BoltStateTransformInterpolatedSnapshots and BoltStateTransform classes are now protected or public, to allow for easier extending of these classes.
Feature: Added the ability to teleport entities to a new location, which gives a clean transition from the old to the new position without any interpolation. Two new methods called Teleport(Vector3 pos, Quaternion rot) and Teleport(Vector3 pos) are available on the BoltEntity class.
Fixed: Assembly references from bolt.dll and bolt.editor.dll pointing on an old version of udpkit.dll
Initial public release