Read about new features, important changes and fixes for version 0.9
Check out the highlighted features for 0.9 release in our blogpost.
This is a maintenance patch that includes the following items:
Spawning of session-based unique Entities that had a UUID in the Prefab and in an instance saved in the Scene.
OnInputSimulatorConnected
is now raised for Simulator or Client-As-Host only if they have both input and state authority.
Selecting Prefab variants no longer updates the internal Archetype name (hence, no unintended schema changes).
Configure window: Animator parameters are no longer added if they already exist.
coherence now warns you when there are internal inconsistencies within the CoherenceSync Archetype data.
coherence Hub: disabled interactions with coherence Cloud when logged out.
The Welcome window is presented when the package is upgraded.
This is a small patch that includes the following items:
Exposed OnConnectionError event in CoherenceMonoBridge.
Automatic passing of room secret when using PlayResolver.GetRoomEndpointData.
Check out the highlighted features in our blogpost: https://coherence.io/blog/news/release-0.9
coherence Hub window: a singular tool combining all the functionality you need to work with coherence.
Per-binding sampling rate configurable from Optimize window.
Additional delay parameters added to InterpolationSettings.
Replication Server can now send the Client commands to change the connection's send frequency of packets.
New floating point compression methods.
Quaternion and Color compression control.
New CoherenceMonoBridge.OnLiveQuerySynced event for notifying when the initial query finishes syncing.
New CoherenceMonoBridge.ClientConnections.OnSynced event for notifying when connections finish syncing.
Threaded keep-alive packets to keep connection alive even when the main thread is stalled.
Allow manual sending of changes on a CoherenceSync object.
SimulatorBuildPipeline public API: a static API to build Simulators, with headless support out of the box.
Unity 2021: Headless Unity Players are now built with the Dedicated Server modules.
Added option to copy the run local simulator build
terminal command to the clipboard.
Queries can be added to any synced GameObject.
Queries are applied to the input authority. This enables server-authoritative games to restrict Client visibility by placing a query on the player Prefab.
Client can connect as a Simulator.
Client can connect as a host for server-simulated inputs (Experimental).
Local Replication Server can now set both send and receive frequencies.
Added options in settings to auto-bake and upload schemas.
Added support for Addressables.
Log to file in Library/coherence.
Icons showing input authority in editor hierarchy.
Entity changes are now based on the simulation frames from their origin.
ServerUpdateFrequency is now SendFrequency.
By default, new fields marked for syncing do not use compression.
Commands do not use any compression for simple types.
CoherenceMonoBridge.ClientConnections.OnDestroyed is now called for the local connection.
Baking timeout increased to 2 minutes.
Baking is now cancellable.
CoherenceSync.HasPhysics is now obsolete.
CoherenceSync's Rigidbody position and rotation is now updated only in the FixedUpdate. In all other cases the Transform.position/rotation will be updated directly.
Predicted toggle is available for Prefabs with no CoherenceInput, but prompts a warning in this case.
Exposed IsInterpolationNone on InterpolationSettings so runtime can check if a binding will interpolate.
The auto-fill functionality from the Endpoint data to run a local Simulator went from being automatic to working manually through a button in the UI.
CoherenceInput fields now only transmit changed field state instead of entire component to save bandwidth.
Authority requests and transfers use ClientID instead of ConnectionID.
Requesting authority over orphaned entities now works only via CoherenceSync.Adopt() call.
Improved layout of settings.
Button in Prefab Mapper now automatically places Prefabs in the correct list (Addressable/non-addressable)
Baking timing out with high number of synced components.
CoherenceLiveQuery and CoherenceTagQuery handling on disable and after disconnect.
Sending commands from the onConnected
callback.
OnValueSynced callbacks working for all value types.
Byte array sync bugfix.
Sampling and send rates now account for time drift across update calls.
Error when trying to dispose non-activated InterpolationSettings.
Unsigned long handling in reflection mode.
Creating connection objects with Global Query turned off.
"WebSocket: already connected" error when changing scenes.
Bug where reconnecting would cause incoming commands to duplicate.
OnEntityUpdated exception caused by samples with frames out-of-order.
WebGL connection timeout issues.
Double query creation in some circumstances.
AutoSimulatorConnection fixed and made the default way to reconnect Simulators. Two obsolete scripts removed.
OnValueSynced event will raise after smaller deltas.
If baked script is missing, fallback to generic pool will map bindings.
OnValueSynced on components shared by multiple Prefabs.
Deleting and recreating unique Entities in the same frame no longer results in broken state.
Pending Entity changes that are not sent in a given packet have their priority increased so that they don't starve out.
Prevent sending component remove updates until the Client knows the Replication Server acknowledged the original create.
Checking for a received packet before deciding we haven't received one and disconnecting. Fixes issue when the main thread stalls before we read packets, causing a timeout disconnect.
Authority change handling for unique Entities.
CoherenceSync spawn issues in bad connection conditions.
Include the instantiating bridge as the fist resolver when resolving bridges in a CoherenceSync object.
Building Simulators: fixed issue where you had to click the Build button twice, in order for the build to trigger.
CustomBinding now respects setToLastSamples parameter during Reset.
InputAuthority is displayed correctly in the CoherenceSync inspector.
SmoothTime is now 0 when using InterpolationSettings.None.
Default Interpolator now implements latest sample instead of nearest neighbor to lower latency.
Interpolation Type set to None now doesn't throw exceptions.
Prefabs set to load using Resources will no longer be overridden to use PrefabMapper.
Prefab instance name no longer breaks LOD's.
'AuthorityMode' has been deprecated in favour of 'AuthorityType'.
'IClient.OnAuthorityTransferRequest' has been deprecated in favour of 'IClient.OnAuthorityRequested'.
'IClient.OnAuthorityTransferRejected' has been deprecated in favour of 'IClient.OnAuthorityRequestRejected'.
'IClient.OnAuthorityChanged' has been deprecated in favour of 'IClient.OnAuthorityChange'.
'IClient.EntityIsOwned' has been deprecated in favour of 'IClient.HasAuthorityOverEntity'.
'IClient.SendAuthorityTransferRequest' has been deprecated in favour of 'IClient.SendAuthorityRequest'.
'IClient.AuthorizeAuthorityTransfer' has been deprecated in favour of 'IClient.SendAuthorityTransfer'.
'SpawnInfo.isLocal' has been deprecated in favour of 'SpawnInfo.authorityType'.
'CoherenceInput.SetInputOwner' has been deprecated in favour of 'CoherenceSync.TransferAuthority'.
'CoherenceSync.isSimulated' has been deprecated in favour of 'CoherenceSync.HasStateAuthority'.
'CoherenceSync.OnAuthorityRequestedByConnection' has been deprecated in favour of 'CoherenceSync.OnAuthorityRequested'.
'CoherenceSync.OnAuthorityGained' has been deprecated in favour of 'CoherenceSync.OnStateAuthorityGained'.
'CoherenceSync.OnAuthorityLost' has been deprecated in favour of 'CoherenceSync.OnStateAuthorityLost'.
'CoherenceSync.OnAuthorityTransferRejected' has been deprecated in favour of 'CoherenceSync.OnAuthorityRequestRejected'.
'CoherenceSync.OnInputOwnerAssigned' has been deprecated in favour of 'CoherenceSync.OnInputAuthorityGained' and 'CoherenceSync.OnInputAuthorityGained'.
'CoherenceSync.RequestAuthority' has been deprecated in favour of 'CoherenceSync.RequestAuthority(AuthorityType)'.
'MonoBridgeStore.GetBridge' has been deprecated in favour of 'MonoBridgeStore.TryGetBridge'.
Manual and auto-latency removed. Latency is now fixed to the binding's sample rate.
"World size" setting.
Manual disabling of updates to rotation and position of the CoherenceSync object.
Removed CoherenceMonoBridge.OnConnectionCreated that was deprecated in v0.8.
Removed CoherenceMonoBridge.OnConnectionDestroyed that was deprecated in v0.8.
Removed CoherenceMonoBridge.ClientConnectionCount that was deprecated in v0.8.
Removed CoherenceMonoBridge.GetMyConnection that was deprecated in v0.8.
Removed CoherenceMonoBridge.GetClientConnection that was deprecated in v0.8.
Removed CoherenceMonoBridge.GetAllClientConnections that was deprecated in v0.8.
Removed CoherenceMonoBridge.GetOtherConnections that was deprecated in v0.8.
Removed CoherenceMonoBridge.SendClientMessage that was deprecated in v0.8.
Removed dependency to the experimental package Platforms. As a result, your existing BuildConfiguration assets will have its defining script missing. To recreate the Simulator build configuration with the new pipeline, you can do it from the Simulators Module in coherence Hub.
Removed dependencies to the following packages: Collections, Properties, Test Framework, Jobs, Burst.
No longer show byte arrays, bools or strings as interpolable types in the Configure window.
If you have issues building clients or simulators, refer to troubleshooting.
Older Versions of Unity Editor not Building WebGL on Latest Mac OS and Ubuntu 22
Unity does not build WebGL because Python 2 is missing on latest Mac OS and Ubuntu 22. This is fixed for Unity Editor version 2020.3.40f1 and onwards.
Persistence
There's a known bug preventing the removal of session-based objects from the scene after the Client disconnects. We're working on it.
LOD levels are not properly updated when queries move or resize.
When upgrading older projects to 0.9, you may get the following error after trying to connect to a Room/World:
System.Collections.Generic.KeyNotFoundException: The given key was not present in the dictionary.
If this happens, you should manually select the Prefabs with the CoherenceSync
component in the Inspector to trigger an update via the GUI (graphical user interface).
If you have any problems after trying this, please let us know on our Discord so we can help you out.